java基础:13.3 集合框架 - Collection、Collections

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/L20902/article/details/88869032


Java 合集框架支持以下两种类型的容器:
· 一种是为了存储一个元素合集,简称为合集(collection) 。
· 另一种是为了存储键/值对,称为映射表( map ) 。

 
之后再学习Map,现在我们将注意力集中在以下合集上。
• Set 用于存储一组不重复的元素。
• List 用于存储一个有序元素合集。
• Stack 用于存储采用后进先出方式处理的对象。
• Queue 用于存储采用先进先出方式处理的对象。
• Priority Queue 用于存储按照优先级顺序处理的对象.

在这里插入图片描述

1、Collection 合集

  数据结构( data structure) 是以某种形式将数据组织在一起的 Collection(合集)。数据结构不仅存储数据,还支持访问和处理数据的操作。在Java里,一种数据结构被认为是一种 容器 ,即一种能存储其他对象的对象。

  Collection是集合框架的根接口.不同的集合具有不同的特性,比如有的集合可以有重复元素,有的不可以,有的可以排序,有的不可排序,如此等等,而Collection作为集合的根接口,它规范定义了集合的通用方法,一个集合我们可以看作一个在内存中的小型数据库,而数据库的常用操作无外乎"增删改查",Collection中的方法也大体是这些类型操作.

  此外Colletion的所有通用实现类都会有一个转换器构造方法,它接收一个Collection类型参数,这样可以以另一个Collection类型集合中元素来初始化自己,也相当于实现了集合类型的相互转换.

Collection 接口为线性表、向量、枝、队列,优先队列以及集合定义了共同的操作。即

CollectionSetListQueueDeque 的接口。( Deque 继承 Queue,间接得继承了 Collection )

Queue: 先进先出队列
Deque: 双向链表
 
 

2、Collection 中的方法

Collection是一个接口,提供了很多方法供子类调用。
add、addAll、 clear、 contains 、contiansAll、 equals 、hashCode 、
isEmpty 、remove 、removeAll 、retainAll 、size 、toArray

Collection 接口中的有些方法是不能在具体子类中实现的。在这种情况下,这些方法会抛出异常java.lang.UnsupportedOperationException ,它是RuntimeException异常类的一个子类。这样设计很好,可以在自己的项目中使用。如果一个方法在子类中没有意义,可以接如下方式实现,它:

public void someMethod() {
     	throw new UnsupportedOperationException
                  ( "Method not supported");
}

 
 

5、Collections 类

Collections 是一个工具类。Collections 包含了执行合集和线性表中通用操作的静态方法。
在这里插入图片描述

sort 排序(升序),要降序的话可以再使用一次reverseOrder()

binarySearch 二分查找(必须提前升序排列好)如果这个键值没有在线性表中,那么这个方法就会返回( -insertion point十1 ) 。

copy

fill 使用对象填充线性表

reverse 反转,逆序排序
reverseOrder() 逆序,返回一个比较器

	List<String> list = Arrays.asList("yellow","red","green","blue");
	Collections.sort(list.Collecgtions.reverseOrder();
	System.out.println(list);

shuffle 混淆

swap 交换

rotate 滚动

max 返回合集中的max对象
min 返回合集中的min对象

synchronizedList 线程安全化 把非线程安全的List转换为线程安全的List

    public static void main(String[] args) {
        
       List<Integer> number = new ArrayList<>();
       for(int i=0;i<10;i++) {
    	   int n = (int) (Math.random() * 10.0);
    	   number.add(n);
       }
       
       print("原始数据:"); 
       print(number);
       
       Collections.sort(number);  print("排序之后:");  print(number);
       
       Collections.reverse(number);  print("反转之后:");   print(number);
       
       Collections.shuffle(number); print("打乱之后:");   print(number);

       Collections.swap(number, 0, 9); print("交换首尾:");  print(number);
       
       Collections.rotate(number, 5); print("右滚动五:");   print(number);
    }
    
    
    public static void print( List<Integer> n) {
    	System.out.println(n);
    }
    public static void print( String n) {
    	System.out.print(n);
    }

原始数据:[9, 3, 9, 4, 0, 5, 2, 4, 6, 6]
排序之后:[0, 2, 3, 4, 4, 5, 6, 6, 9, 9]
反转之后:[9, 9, 6, 6, 5, 4, 4, 3, 2, 0]
打乱之后:[6, 9, 3, 5, 4, 6, 9, 4, 2, 0]
交换首尾:[0, 9, 3, 5, 4, 6, 9, 4, 2, 6]
右滚动五:[6, 9, 4, 2, 6, 0, 9, 3, 5, 4]

猜你喜欢

转载自blog.csdn.net/L20902/article/details/88869032