关于类集
解释:类集是java对数据结构成熟的实现。
常见的数据结构有:
- 栈:先进后出
- 队列:先进先出
- 数组:易查找,但增删慢
- 二叉树:一般用于查找(查找快)
- 链表:增删快,不易查找
关于Collection
Collection是一个接口,但经常使用它的子接口:“List”,“Set”;
List接口
List中的内容是允许重复的。
List接口的实现类包括:ArrayList、LinkedList、Vector(最后一个不常用)
ArrayList类
使用的是数组结构,查找快,增删慢
ArrayList通过无参构造方法构造的集合在开始时长度为0
当第一次存数据时,会对集合进行扩容,默认为10。(注意是使用无参构造器时)
当存满后,集合会扩大到原来的1.5倍。
Vector类
和ArrayList类似,不过它是线程安全的实现,是同步的。
LinkedList类
使用的是双向链表结构,增删快,查找慢
压栈
压栈使用了push()方法。
data.push(1);
data.push(2);
先将整数1压入底部,然后再将整数2压在1的上面。
弹栈
弹栈使用了pop()方法。
Integer i = data.pop();
System.out.println(i);//输出为2
取出栈顶元素,由于2在1的上面(1被2压在下面),所以先取出2。
单向队列
从首部存储,并从尾部取出来。
data.addFirst(1);
data.addFirst(2);
Integer i = data.removeLast();
System.out.println(i);//输出位1
双向队列
可以从头部存储、取出,也可以从尾部存储、取出。
//从头部存,并从头部取出
data.addFirst(1);
data.addFirst(2);
Integer i = data.removeFirst();
System.out.println(i);//输出为2
Iterator迭代器
用于迭代Collection下的集合(List和Set)。
迭代器用一个指针进行操作,先判断下一个是否有内容(一开始是指在0的前面),如果有则继续,并将指针向下移,以此类推。
LinkedList<Integer> data = new LinkedList<>();
data.add(1);
data.add(2);
data.add(3);
Iterator<Integer> i = data.iterator();
while(i.hasNext()){
System.out.print(i.next()+" ");
}//输出 1 2 3
ListIterator迭代器
用于迭代List(ListIterator是Iterator的一个子类)
forEach
用于增强for循环。
语法:
for(数据类型 变量名: 数组名或集合名){}
ArrayList<Integer> data = new ArrayList<>();
data.add(1);
data.add(1);
data.add(2);
data.add(2);
for (Integer i:data) {
System.out.print(i+" ");
}//输出 1 1 2 2
Set接口
Set中的内容是不允许重复的。
HashSet类
HashSet是散列存放的,不允许重复且顺序由哈希表决定,并不是自然顺序存放的。
HashSet<String> set = new HashSet<>();
set.add("锄禾日当午");
set.add("汗滴禾下土");
set.add("谁知盘中餐");
set.add("粒粒皆辛苦");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
//输出内容为下:
汗滴禾下土
谁知盘中餐
锄禾日当午
粒粒皆辛苦
TreeSet类
TreeSet基于TreeMap。它的顺序是按二叉树的结构存放的。
TreeSet<String> data = new TreeSet<>();
data.add("b");
data.add("a");
data.add("d");
data.add("c");
for (String s:data
) {
System.out.print(s+" ");
}//输出 a b c d
关于Map集合
Map集合存储的是一个个的“键值对”数据。
Map集合的键(key)不可重复。
大多数Set集合的内部都使用了Map集合。