List接口的实现类:ArrayList LinkedList Vector Stack
ArrayList 和 Vector 的异同:
相同:底层都是利用数组的原理来实现
不同:
ArrayList线程不安全,效率更高
Vector线程安全
Stack 先进后出
LinkedList
数据结构是双向链表
ArrayList 和 LinkedList的区别:
数据结构:
ArrayList是采用线性表实现的
LinkedList是采用链表实现的
操纵性能:
ArrayList适合做查询功能,性能更优
LinkedList做插入和删除的操作性能更优
------------------------------------------------
Set接口的实现类 :HashSet TreeSet
set的遍历方式:
1. 在jdk1.5之后出现了一种for循环,增强for 或者 foreach
for(你要遍历的集合或者数组类型 a:要遍历的数组或者集合){
//a表示每次遍历的元素
}
当类实现了Iterable接口的时候,可以使用foreach循环进行遍历
interface Iterable<T>{
Iterator<T> iterator();
}
如果能用iterator()进行遍历,一定能用foreach进行遍历
2. iterator迭代器的作用:对集合进行遍历
常用方法:
next(): 返回当前位置的元素并将指针移动到下一个元素
hasNext():判断当前位置是否有元素
remove():删除迭代器返回的最后一个元素
注意:
如果使用iterator在迭代过程中,一次循环中只能删除一个元素
要删除元素 ,必须使用iterator的remove方法 不能使用集合的remove方法
否则会报错:ConcurrentModificationException
HashSet
对应的数据结构是哈希散列表
equals() hashCode() 结果
true true f1和f2认为是重复元素
true false f1和f2不重复
false true f1和f2不重复
false false f1和f2不重复
如何判断元素重复的流程:
1. 通过调用待添加对象的hashCode方法 得到hash值
2. 通过hash值 经过算法 得到待添加对象在hash表中的位置
3. 如果当前位置没有元素,立即放入
4. 如果当前位置有元素,调用待添加对象的equals或者==(和当前位置的已有元素进行比较)
5. equals或者== 结果为true 当前待添加对象被舍去
6. equals或者== 结果为false,将当前待添加对象追加到当前位置 以链表的形式
使用HashSet<T> 需要重写T的hashCode和equals方法
-------------------------------------------
作业:
用HashSet实现用户管理系统,改写dao层
重写hashCode :根据id生成hash值
重写equals:根据id是否相同 来判断是否为同一对象
讲师笔记,Java基础学习之路之day18——List接口实现类
猜你喜欢
转载自blog.csdn.net/u011189148/article/details/81417156
今日推荐
周排行