黑马程序员-笔记-06-集合
来源:互联网 发布:js定义字符串数组 编辑:程序博客网 时间:2024/06/06 17:02
java中的集合:
Collection ---------List ----------ArrayList
|| ||-------------LinkedList
||
||--------set ------------HashSet
|| ||--------------TreeSet
||
||---------Vector
List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引,可以通过索引查询。元素可以重复。
ArrayList:底层的数据结构是数组,线程不同步,ArrayList替代了Vector,查询元素的速度非常快。但是增加删除一般。
LinkedList:底层的数据结构是链表,线程不同步,增删元素的速度非常快。但是查询速度一般。
Vector:底层的数据结构就是数组,线同步的,Vector无论查询和增删都比前两者要慢。
Set:无序(存入和取出顺序有可能不一致),不可以存储重复元素,就算是存入了同一个,不会保存。必须保证元素唯一性。
HashSet:底层数据结构是哈希表,线程是不同步的。无序,高效;
TreeSet:对Set集合中的元素的进行指定顺序的排序。不同步。TreeSet底层的数据结构就是二叉树。
ArrayList、HashSet、TreeSet的存储原理:是如何判断一个元素的重复,如何判断是否包含一个元素?
1)对于List集合,判断元素是否存在,或者删元素底层依据都是equals方法。
2)对于HashSet集合,判断元素是否存在,或者删除元素,底层依据的是hashCode方法和equals方法。
3)TreeSet:用于对Set集合进行元素的指定顺序排序,排序需要依据元素自身具备的比较性。如果元素不具备比较性,在运行时会发生ClassCastException异常,元素无法比较。所以需要元素实现Comparable接口,强制让元素具备比较性,复写compareTo方法。依据compareTo方法的返回值,确定元素在TreeSet数据结构中的位置。
TreeSet集合排序有两种方式,Comparable和Comparator区别:
1:让元素自身具备比较性,需要元素对象实现Comparable接口,覆盖compareTo方法。
2:让集合自身具备比较性,需要定义一个实现了Comparator接口的比较器,并覆盖compare方法,并将该类对象作为实际参数传递给TreeSet集合的构造函数。
集合的共性方法,与迭代。
共性方法:CRUD ,增删改查。(略)
迭代方案:
1.list集合,存在下表,可以使用for循环,来取。
2.增强型for循环。
3.Collection的Iterator方案。通过集合获得,各自的迭代器,通过迭代方案获得。
Iterator it = list.iterator();while(it.hasNext()){int i = (Integer) it.next();if(i==1){//list.add(4);it.remove();//list.remove(i);}} //Previous向前遍历集合。while(it.hasPrevious()){System.out.println(lit.previous());}3种方案的关键点:
1)迭代时不能通过集合对象来修改对象。只能用迭代器方法来操作元素,但是Iterator的方法元素有限,
(如果此时依然希望修改添加元素,,必须使用Iterator的子接口,List特有的特有的迭代器,ListIterator。 )
2)对结合的的增强行for循环,不能对数组进行移除操作。3)对于List集合,直接使用下标的方式循环遍历,是可以进行各种操作的。但是容易处错误。
哈希表的原理:存储哈希值的结构,称为哈希表。
1,对对象元素中的关键字(对象中的特有数据),进行哈希算法的运算,并得出一个具体的算法值,这个值称为哈希值。
2,哈希值就是这个元素在内存的位置。
3,如果哈希值出现冲突,再次判断这个关键字对应的对象是否相同。如果对象相同,就不存储,因为元素重复。如果对象不同,就存储,在原来对象的哈希值基础 +1顺延。
4,既然哈希表是根据哈希值存储的,为了提高效率,最好保证对象的关键字是唯一的,同时在存储完毕后,不应该在此修改这个关键字。
Collection集合的其他知识:
Enumeration:枚举是Vector特有的取出方式。枚举和迭代器是一样的。vector被list取代后,枚举随之也被迭代器取代。
Vector v = new Vector(); Enumeration en = v.elements();
while(en.hasMoreElements())
System.out.println(en.nextElement());
- 黑马程序员-笔记-06-集合
- 黑马程序员_java基础笔记(06)...集合
- “黑马程序员”-java集合笔记
- 黑马程序员_Java 集合笔记
- 黑马程序员-笔记-07-集合
- 黑马程序员-学习笔记-集合
- 黑马程序员_java基础学习笔记06_集合框架
- 黑马程序员--集合框架笔记(一)
- 黑马程序员---Map集合 学习笔记
- 黑马程序员java笔记之一-----Map集合
- 黑马程序员-----集合框架总结笔记一
- 黑马程序员-----集合框架笔记二
- 黑马程序员-------集合框架总结笔记三
- 黑马程序员_java集合学习笔记
- 黑马程序员-java集合 学习笔记
- 黑马程序员 java集合框架笔记(一)
- 黑马程序员 java集合框架笔记(二)
- 黑马程序员 java集合笔记(一)
- [032] 微信公众帐号开发教程第8篇-文本消息中使用网页超链接
- DTD的定义
- xcode4 空格是否可见的设置
- PHP ----Include,require
- 配置SSH免密码登陆
- 黑马程序员-笔记-06-集合
- 【初窥javascript奥秘之Ajax】简述下你所知道的Ajax?
- pthread_cond_wait()
- 关于网络编程中的字节序问题
- android 安全的未来(II)
- uva 532 - Dungeon Master
- Android Studio使用教程(一)
- 黑马程序员-笔记-07-集合
- save