1.集合
1.1.集合和数组的区别
- 数组的长度是固定的,不能再添加元素
- 集合类的长度是可变的,随着元素的增加而增加
- 数组能存基本数据类型和 引用数据类型
- 集合当中只能存放对象,基本数据类型也会自动装箱
1.2.什么时候使用数组,什么时候使用集合类
- 如果元素的个数是固定的,推荐使用数组
- 如果元素的个数是不固定的,推荐使用集合
1.3.Collection 集合的接口,add(),remove(),clear(), isEmpty();
- List(有序)接口,实现类,是可以添加重复元素
- ArrayList(内部结构数组),覆盖了toString(),可以直接打印结果。
- LinkedList(内部结构链表)
- Vector(内部结构数组),jdk1.2并到list的
- Set(无序)接口,实现类如下,不能添加重复元素
- HashSet(内部结构Hash算法)
- TreeSet(内部结构二叉树)
1.4.集合的遍历
- 把集合转化为数组,然后遍历, toArray()会把集合转化为Object数组,自动向上转型
- 迭代器遍历,Iterator
1.5.集合的常用方法
- addAll(),把集合合并到一起。
- removeAll()删除两个集合的交集。
- containsAll(),判断是否包含整个集合
- retainAll(),取两个集合的交集 ,boolean res = s.retainAll(t); 集合变化了返回true,否则返回false
1.6.集合Iterator迭代删除,添加元素容易并发异常,需要使用自己的迭代器,listIterator(),list特有的。
1.7.list向前遍历,listIterator.hasPrevious(); listIterator.previous();
1.8.ArrayList和LinkedList
- ArrayList容量增加50%,查询修改快,添加删除慢
- LinkedList查询修改慢,添加删除快。特有的方法,addFirst(),removeFirst()...
- Vector可以用Enumeration遍历,加锁更安全。
Vector v=new Vector();
Enumeration e=v.elements();
while (e.hasMoreElements()){
e.nextElement();
}
1.9.list去除重复的对象,需要重写equals方法。contains方法比较的是对象地址。
2.LinkedList 实现栈的数据结构
class ClassStack {
LinkedList linkedList;
ClassStack() {
linkedList = new LinkedList();
}
//入栈
void push(Object obj) {
linkedList.addLast(obj);
}
//出栈
void pop(Object obj) {
linkedList.removeLast();
}
@Override
public String toString() {
return "ClassStack{" +
"linkedList=" + linkedList +
'}';
}
}
public class TestStack {
public static void main(String[] args) {
// Stack stack= new Stack();
// stack.pop();
ClassStack stack = new ClassStack();
stack.push("a");
stack.push("b");
stack.push("c");
System.out.println(stack);
}
}