------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
1.集合的由来
2.集合的框架体系
3.集合分类及其子类
集合和数组的区别;
区别1 :
数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值
集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象
区别2:
数组长度是固定的,不能自动增长
集合的长度的是可变的,可以根据元素的增加而增长
总结:
1,如果元素个数是固定的推荐用数组
2,如果元素个数不是固定的推荐用集合
3.集合的框架体系(Collection)是单列集合的顶层接口,collections是其工具类,要学习collection接口,先要搞清楚它的分类和体系,用一张图清晰的表示一下,学起来会清晰许多.
这是单列集合图,还有双列集合是Map集合,所以要区分开.
1.Collection
Collection接口下有两个子类可以实现.一个是List一个是Set
List子类分为三个:ArrayList(数组实现) LinkedList(链表实现) Vector(数组实现)
Set子类分为两个 :TreeSet(二叉树实现) HasSet(哈希算法)
2.List和Set
List和Set有这明显的区别但前提是他们都继承Collection接口,但List中存取数据有序有索引,元素可重复,而Set与List相对,无索引,值唯一,无序.
首先先来说List及其子类:
ArrayList(数组实现) : 因为底层是数组实现,所以ArrayList的查询和更改数据较快,但增删比较慢. 线程不同步,不安全.
LinkedList(链表实现) : 因为底层是链表实现,所以LinkedList的查询比较慢,但增删较快.线程不同步,不安全.
Vector(数组实现) : 底层与ArrayList一样,都是有数组实现,所以查询和更改数据较快但,增删比较慢,但线程同步,安全.
接下来是Set及其子类:
TreeSet(二叉树实现) : 与ArrayList不同,两个子类都会保证元素的唯一性.但为什么能元素能唯一呢.treeset是通过匿名内部类,重写了compareto方法,保证元素的唯一性,如果这个数和之前一样那么返回0,如果前面没有重复,返回值是1,向Treeset集合添加元素,其实根据二叉树也能够得到这个结论,将第一个数作为根节点,下一个数是负数,就添加到根节点的左边的位置,如果是正数就添加到根节点的右边位置,如果一样大,系统默认为覆盖.
HasSet(哈希算法) : hashset是因为它自身重写了hashcode() 和equals()方法,hashcode比较的是元素的地址值,而equals比较的是元素的属性值.所以两个比较就能保证元素的唯一性.
集合的遍历:
集合的遍历有三种: 普通for循环 迭代器(Iterator) 还有一种是list中特有的迭代方式(listiterator)
而在集合中,如果在遍历的同时要往集合中更改或者添加元素用普通迭代器会出现并发修改异常(java.util.ConcurrentModificationException).如图.
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<String> ls = new ArrayList<>();
ls.add("a");
ls.add("b");
ls.add("c");
ls.add("d");
Iterator<String> it = ls.iterator();
while(it.hasNext()){
ls.add("g");
System.out.println(it.next());
}
}
所以这时就要用list特有的迭代器来遍历 如图:
ArrayList<String> ls = new ArrayList<>();
ls.add("a");
ls.add("b");
ls.add("c");
ls.add("d");
ListIterator<String> it = ls.listIterator();
while (it.hasNext()) {
String str = it.next();
if (str.equals("a")) {
it.add("g");
}
}
System.out.println(ls);
}
由此得知在遍历集合的时候也可以添加删除元素.
至于linkedlist,要说下当中的特有的方法
addFirst() :在第一个位置添加元素
addLast() : 在最后一个位置添加元素
RemoveFirst();如果集合当中没有元素,那么会出现空元素异常NoSuchElementException 删除第一个
RemoveLast();如果集合当中没有元素,那么也会出现空元素异常NoSuchElementException 删除最后一个
有很多不足,希望大家给点建议,我会加以改正.谢谢.