1. List
单列元素的集合,iterator遍历,有序,可重复。
1.增:
public void add(int index, E ele) : 将元素ele添加到index位置。
2.删:
public E remove(int index) : 移除列表中指定位置的元素, 返回的是被移除的元素。
3.改:
public E set(int index, E ele) :用指定元素替换集合中指定位置的元素,返回值为被替换的元素。
4.查:
public E get(int index) :返回集合中指定位置的元素。
以上所有方法都有一个"index(索引)"参数,一般是从0开始;这个索引在使用时要保证在正确的范围,否则会抛出异常;
1.1 ArrayList
线程相对不安全,无特有方法,内部数组实现(查询快,增删慢)。
ArrayList<String> list = new ArrayList<>();
list.add("花无缺");
list.add("小鱼儿");
list.add("四大恶人");
//遍历:方式一:迭代器(for each)Collection接口
Iterator<String> it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
//遍历:方式二:get(index)List接口
for(int i = 0;i < list.size(); i++){
System.out.println(list.get(i));
}
1.2 LinkedList
- 有一些特有方法,可以模拟栈、队列;
1).addFirst():可以模拟进栈
2).addLast():可以模拟排队;
3).push():可以模拟进栈
4).pop():从列表的开头取出,并删除一个元素;可以模拟出栈;
poll():从列表的开头取出,并删除一个元素;可以模拟出栈;(如果列表为空,不抛异常,比较常用);
-
内部是“链表”实现;查询慢;增删快;
-
使用LinkedList模拟栈:
public class Demo {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
//压栈
list.push("张无忌");
list.push("周芷若");
list.push("赵敏");
list.push("小昭");
//弹栈
while (list.size() > 0) {
System.out.println("出栈:" + list.poll());
}
}
1.3 Vector
线程相对安全,适合多线程,一次扩容为原来的两倍。
2 Set
除LinkedHashSet外,是无序的不可重复的单列元素的集合,无法指定获取第几个元素。
2.1 HashSet
将对象存储在HashSet之前,要先确保对象重写equals()方法和HashCode方法,去比较对象的值是否相等。
public class Demo {
public static void main(String[] args) {
Set<Student> stuSet = new HashSet<>();
//Student类要重写hashCode()和equals()方法
stuSet.add(new Student("刘亦菲",18));
stuSet.add(new Student("刘亦菲", 19));
stuSet.add(new Student("刘亦菲", 19));
for (Student stu : stuSet) {
System.out.println(stu);
}
}
2.2 LinkedHashSet
- LinkedHashSet是Set的特例:有序的由链表 + 哈希表实现;
- 链表:保证元素的顺序;
- 哈希表:保证元素的唯一;
public class Demo {
public static void main(String[] args) {
Set<String> set = new LinkedHashSet<>();
set.add("孙悟空");
set.add("猪八戒");
set.add("白龙马");
set.add("曹操");
for (String s : set) {
System.out.println(s);//有序的
}
}
3 Map
双列集合,通过key-value键值对,用于保存具有映射关系的数据。
3.1 HashMap
线程相对不安全,key或value可为null,适合增删改。HashTable:相对线程安全,key或value不可为null。
3.2 TreeMap
存储key-value时,根据key对节点进行排序,所有的key-value处于有序状态,它的排序分为自然排序和定制排序。三个map中最慢,因为要排序。比较适合遍历用。
3.3 LinkedHashMap
使用链表维护key-value的次序,可以记住键值对的插入顺序。比hashmap慢,因为要维护键值对。
4 Queue
队列,先进先出,队头删除元素,队尾插入元素,线性结构。