Collection 类
单值集合的最大父类
一、List接口
实现类 ArrayList, Vector, LinkedList。
1.ArrayList
增删很慢,查找很快
2.vector
同步操作,线程安全
3.LinkedList
双向链表
Iterator 和 ListIterator 的用法
/**
* 迭代器
* Iterator
* ListIterator
*/
public class Demo2 {
public static void main(String[] args) {
ArrayList<Integer> data = new ArrayList<>();
data.add(1);
data.add(2);
data.add(3);
data.add(4);
data.add(5);
Iterator<Integer> iter = data.iterator();
// while(iter.hasNext()){
// Integer next = iter.next();//下移并返回
// System.out.println(next);
// }
// iter.next();
// iter.remove(); //必须先用next()获取才能删除
// System.out.println(data.size());
ListIterator<Integer> iter2 = data.listIterator();
// iter2.previous(); // 必须先往下才能往上
iter2.add(100); // 此时指针在第一个元素之前,因此add的值变为了第一个值,其他的往后顺延
iter2.next();
iter2.next();
iter2.set(200); // 可以设置值
System.out.println();
iter2.previous();
iter2.previous();
while(iter2.hasNext()){
System.out.println(iter2.next());
}
forEach 增强for循环 (自动使用最佳的迭代方法)
只能用于迭代数组 或者 集合(Collection下的集合)
/**
* 增强for循环 forEach
*
*/
public class Demo3 {
public static void main(String[] args) {
int[] arr = {6,5,4,2,10,2};
for (int data : arr) {
System.out.println(data);
}
System.out.println("-----------------");
ArrayList<String> data2 = new ArrayList<>();
data2.add("12345");
data2.add("54321");
data2.add("67890");
data2.add("09876");
for (String s: data2) {
System.out.println(s);
}
}
}
二、Set 接口
Set 也继承自Collection,这两个类都没用get方法来获得数据 需要用迭代器 或者用toArray() 转为数组 Set 是不包含重复元素的集合 包括null
1.HashSet
//HashSet 有增加 删除 没有get
//散列存储, 重复利用了双值哈希表 HashMap
//无序存储,无法保证存储的顺序
HashSet<String> hs = new HashSet<>();
hs.add("锄禾日当午");
hs.add("汗滴禾下土");
hs.add("谁之盘中餐");
hs.add("粒粒皆辛苦");
//重复添加不会成功, add方法返回false
Iterator<String> iterator = hs.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
//遍历用forEach也行
2.TreeSet
/**
* TreeSet 有序的
* 是按照自然顺序 而非 录入顺序
*/
TreeSet<String> data = new TreeSet<>();
data.add("A");
data.add("D");
data.add("C");
data.add("B");
for (String datum : data) {
System.out.println(datum);
}
System.out.println((char)1);
/*
在存储自己定义的类时,会出现一些问题
需要类实现 Comparable 接口,
并实现其compareTo函数用来比较自定义对象的大小
根据compare返回值 负数:this小 0:一样大 正数:this大
来决定谁大谁小, 若是两个一样大 则不存
*/