Java 合集框架支持以下两种类型的容器:
· 一种是为了存储一个元素合集,简称为合集(collection) 。
· 另一种是为了存储键/值对,称为映射表( map ) 。
之后再学习Map,现在我们将注意力集中在以下合集上。
• Set 用于存储一组不重复的元素。
• List 用于存储一个有序元素合集。
• Stack 用于存储采用后进先出方式处理的对象。
• Queue 用于存储采用先进先出方式处理的对象。
• Priority Queue 用于存储按照优先级顺序处理的对象.
1、Collection 合集
数据结构( data structure) 是以某种形式将数据组织在一起的 Collection(合集)
。数据结构不仅存储数据,还支持访问和处理数据的操作。在Java里,一种数据结构被认为是一种 容器
,即一种能存储其他对象的对象。
Collection是集合框架的根接口.不同的集合具有不同的特性,比如有的集合可以有重复元素,有的不可以,有的可以排序,有的不可排序,如此等等,而Collection作为集合的根接口,它规范定义了集合的通用方法,一个集合我们可以看作一个在内存中的小型数据库,而数据库的常用操作无外乎"增删改查",Collection中的方法也大体是这些类型操作.
此外Colletion的所有通用实现类都会有一个转换器构造方法,它接收一个Collection类型参数,这样可以以另一个Collection类型集合中元素来初始化自己,也相当于实现了集合类型的相互转换.
Collection 接口为线性表、向量、枝、队列,优先队列以及集合定义了共同的操作。即
Collection
是 Set
、 List
、 Queue
和 Deque
的接口。( 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]