集合
List
有序的
允许重复的
ArrayList实现类:基于数组实现
remove语句,删除成功则返回true,不成功则返回false
注:不要在迭代时进行删除,否则会出错,可以使用迭代器自身的remove方法,如上。
LinkList实现类:基于链表实现
与ArrayList区别:越靠近头部的添加删除,ArrayList越慢,越靠近尾部越快
在什么位置添加内容对LinkList几乎运行速度都一样
根据索引删除,arrayList效率相对较高,但当删除内容在头部是,link快得多
根据元素删除,arrayList删除快
普通for循环,遍历效率arrayList比linkList快得多
foreach循环遍历,两者差不多
Vector也是List子类,基于数组实现
线程安全,arrayList线程不安全,其他两者无区别
Queue队列,ArrayQueue
poll方法 返回第一个值且从队列中删除
peek方法 返回第一个值但不删除
Stack栈
push方法,压栈,与add相同
peek 返回最后一个值不删除
pop 返回最后一个的值且删除
List的几种迭代方式
//普通for循环
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
System.out.println();
//增强for循环
for (Entry s : list) {
System.out.print(s + " ");
}
System.out.println();
//迭代器
Iterator<Entry> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next()+ " ");
}
System.out.println();
//1.8以后的迭代方法, 如果已经有了方法了就用::符号
list.forEach(System.out::print);
System.out.println();
//常见的lambda语法
list.forEach(s -> System.out.print(s + " "));
list中的选择性删除的方式
//把list中所有的不能被3整除的删掉, 需要有个中间的集合来保存要删除的元素
ArrayList<Entry> removes = new ArrayList<>();
for (Entry entry : list) {
if(entry.getIndex() % 3 != 0){
removes.add(entry);
}
}
list.removeAll(removes);
// lambda表达式
//list.removeIf(e -> e.getIndex() % 3 != 0);
list和数组
都是存储相同数据类型的元素
但是list的长度是可变的, 数组的元素是不可变的
栈和队列
//队列
Queue<Integer> queue = new ArrayDeque<>();
queue.add(1);
System.out.println(queue.poll());
System.out.println("队列的size是: " + queue.size());
System.out.println("======================================");
Stack<Integer> stack = new Stack<>();
stack.push(59);;
System.out.println(stack.pop());
set
无序的
不允许重复(添加顺序和存储顺序)
只能使用迭代器或者增强for循环进行遍历
HashSet
如何判断是相同元素:
首先判断HashCode是否一样
如果一样, 比较equals方法, 如果也返回true, 则视为相同
TreeSet
如何存的?
(树形结构 -> 二叉树 -> 红黑树)
如何判断是否相同?
- 让比较对象 实现Comparable接口(一劳永逸的解决方案)
- 给TreeSet对象传入一个实现Comparator的对象(更加灵活)注意: 如果两者都实现了, 依第2种方式为准
总结
Collection: 父接口:
Set: 接口-实现类: HashSet, LinkedHashSet
List: 接口-实现类: LinkedList, Vector, ArrayList
SortedSet: 接口-实现类: TreeSet
Map接口-实现类: HashMap, HashTable, LinkedHastMap, Properties
1, List: 有序列表, 允许存放重复的元素
实现类 :
ArrayList:数组实现,查询快,增删慢,线程不安全,轻量级;
LinkedList:链表实现,增删快,查询慢
Vector:数组实现,线程安全,重量级
2, Set:
无序集合,不允许存放重复的元素;允许使用null元素
HashSet 的后台有一个HashMap;初始化后台容量;只不过生成一个HashSet的话,系统只提供key的访问; 如果有两个Key重复,那么会覆盖之前的;
实现类 HashSet:equals返回true,hashCode返回相同的整数;哈希表;存储的数据是无序的。
实现类LinkedHashSet:此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。存储的数据是有序的。
3、Map
HashMap:键值对,key不能重复,但是value可以重复;key的实现就是HashSet;value对应着放;允许null的键或值;
Hashtable:线程安全的,不允许null的键或值;
Properties::key和value都是String类型,用来读配置文件;
TreeMap:对key排好序的Map; key 就是TreeSet, value对应每个key; key要实现Comparable接口或TreeMap有自己的构造器;
LinkedHashMap: 此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。存储的数据是有序的。
4、两个工具类 Arrays 和 Collections
1.Arrays、此类包含用来操作数组(比如排序和搜索)的各种方法。
2.Collections、主要提供了在 collection 上进行操作的静态方法(同步集合类方法) 。