集合总结

来源:互联网 发布:淘宝自主访问 编辑:程序博客网 时间:2024/06/18 09:29

Collection

是一个集合接口,内部已实现类为Arraylist和LinkedList,可利用多态法创建对象
Collection list=new Arraylist();
内部方法:
1.add()
list.add(Object o)直接添加一个数据默然添加到尾部,可添加对象,各种数据
list.add(int index,Object o):添加数据到指定位置
2.addAll():
list.addAll(Collection list2):将list2中所有数据添加到list的末尾
list.addAll(int index,Collection list2):添加list2的数据到list的指定位置
3.remove():
list.remove(Object o):将对象o从list中删除,如果list中存在o则删除,并返回true,如果list中没有o,则返回false;
4.removeAll():
list.removeAll(Collection list2):删除list中与list2重复的元素,只要list中存在和list2中一样的元素,就删除并返回true,如果没有重复元素,就返回false
5.clear();
list.clear():清除list中的所有元素
6.isEmpty():
list.isEmpty():如果list为空则返回true,非空返回false
7.contains():
list.contains(Object o):如果list里面有对象o,就返回true,没有就返回false
8.containsAll():
list.containsAll(Collection list2):如果list2是list的子集,则返回true,否则返回false
9.size():
list.size():返回list中的元素个数

List

(Collection的实现类,拥有Collection的全部方法,可以存储重复数据)

1.ArrayList

内部维护一个Object数组,大小为10个,当默认的或者指定的容量不够存储对象的时候,容量自动增长为原来的容量的1.5倍。

2.LinkedList

由链表实现,拥有Collection的9个方法还有自己的特别方法
1.addFirst(E e)// 添加对象到第一个位置
2.addLast(E e) //添加对象到最后一个位置
3.getFirst() //得到链表第一个元素
4.getLast() //得到链表最后一个元素
5.removeFirst()// 移除链表第一个元素
6.removeLast()//移除链表最后一个元素

利用链表实现数据结构栈和队列
栈:
push()//压栈
pop()//出栈(空栈出栈报异常)
队列:
offer()//入队
poll()//出队(空队出队报异常)

迭代器

Iterator it=list.iteraor();
方法:
boolean hasNext() //判断集合中是否有元素,如果有元素可以迭代,就返回true
E next() //返回迭代的下一个元素,注意: 如果没有下一个元素时,调用
next元素会抛出NoSuchElementException
void remove()//移除迭代器当前迭代到的元素
注意在对集合进行迭代过程中,不允许出现迭代器以外的对元素的操作,因为这样会产生安全隐患,java会抛出异常并发修改异常(ConcurrentModificationException)

特殊迭代器

List的迭代器:ListIterator it=list.listIterator();
有普通迭代器的三种方法,还有其他方法
add(E e) //在当前迭代元素后面添加
void set(E o)//用指定元素替换当前迭代元素
hasPrevious()//逆向遍历列表,列表迭代器有多个元素,则返回 true。
previous()//往前迭代。

Set

(不会存储重复的元素)

1.HashSet

(储存元素无序,线程不安全,存取速度快。底层是以哈希表实现的。)
开辟一个大的空间来储存,根据数据的hashCode来选择储存位置,所以是空间复杂度换时间复杂度
储存数据时调用hashCode函数查看数据的哈希值选择储存位置,如果存在hashCode相同的元素,调用equals()函数判断两个元素是否相等,相等则无法存储相同元素,不一样将两个元素存储在同一块表中

2.TreeSet

(内部用红黑树实现,使数据储存有序)
单纯的数据类型具备比较原则,对于自定义类需要一个比较原则:
1.用TreeSet存储的类实现comparable接口,实现compateTo方法,返回一个整数,返回整数代表this大,返回0代表两个值相等,传参为一个Object对象,先强转,再利用当前类的this对象和强转的对象利用关键值进行比较,例如返回this.id-o.id
2.自定义一个类实现comparator接口,并实现compare方法,传参为两个Object对象,先强转两个对象,在利用相关数据返回整数,在定义TreeSet时先创建一个自定义类的对象,将对象传入:new TreeSet(O);
当两种比较原则同时存在时,comparator大于comparable