黑马程序员--Java学习笔记之集合框架
来源:互联网 发布:mouldflow软件 编辑:程序博客网 时间:2024/04/28 14:38
一、Collection
Collection|--List:元素是有序的。元素可以重复,因为有索引 |--ArrayList:底层使用数组结构。查询快,但是增加、删除慢。可变长度数组,默认创建是10,如果添加时超过,则会新建一个ArrayList长度为原长的150%,之后把所有元素copy进新的ArrayList。 |--LinkedList:链表数据结构。增加、删除快,查询慢。特有方法:addFirst() addLast() getFirst() getLast() removeFirst() removeLast()1.6之后新方法:peekFirst().... |--Vector:数组数据结构。和ArrayList差不多,比ArrayList早,是线程同步的。增删查都满。一般不用。可变长度,...200%...。支持枚举取元素(也支持迭代器、遍历)。|--Set:元素无序。元素不可以重复 |--HashSet:底层数据结构式哈希表。无序,不能重复。HashSet如何保证元素唯一性?是通过元素的两个方法,hashCode()和equals()来完成。如果元素的HashCode值相同,才会判断equals是否为true。注意,对于判断元素是否存在、及删除都是依赖于以上两个方法。而ArrayList只依赖于equals() |--TreeSet:可以对Set集合中的元素进行自然排序。往TreeSet中存放的对象具有比较性。(可以实现Comparable,并覆盖int compareTo()方法,强制使其具备可比较性)排序时,当主要条件相同时一定要判断次要条件。不能存入重复元素。*使用二叉树,仿堆栈?仿队列?compareTo()返回1 0 -1(各含义)
TreeSet集合排序方式1、实现Comparable接口,覆盖compareTo()方法
2、当元素不具备可比较性时,让集合具有可比性。定义一个比较器,并在集合在初始化时传递给TreeSet的构造函数
当两种排序都存在时,以比较器为主
二、Collection和Collections的关系
Coolection是java.util包下的一个集合接口,是将各集合类向上抽象出的最顶端的接口。它为各种具体集合提供了统一的操作方式。它的最重要的两个子接口是List和Set。
Collections是java.util包下的一个集合工具类,它包含了各种和集合操作有关的静态方法,比如常见的搜索、排序操作、线程安全化等。
三、List和Set的异同点
1、相同点:List和Set都是Collection的子接口,都能存储元素,也都具有集合常用的操作方法,比如增加、删除、查找、判断等。
2、不同点:List的底层实现主要是数组或者链表数据结构,因此是有序的,并且有索引,这样可以精确的定位到List中具体位置的元素,类似于数组;List中可以存储重复的元素。
Set的底层实现主要是哈希表或者二叉树,所以是无序的(其中实现类TreeSet可以自然排序,除外),Set中不可以存储重复的元素。
四、Map中的常用类,以及各自的特点
Map<K,V> 映射关系。和Set很像,其实Set底层就是使用Map集合|--Hashtable:底层是哈希表数据结构。不允许存入null建和值。线程同步。api 1.0 效率低下|--HashMap:底层是哈希表数据结构。允许存入null建和值。线程不同步。api 1.0 效率高|--TreeMap:底层是二叉树。可以用于给map中的键进行排序。线程不同步。
五、并发修改异常
ArrayList al = new ArrayList();al.add("java");//集合操作数据al.add("net");Iterator it = al.iterator();//获取迭代器,用迭代器操作数据while(it.hasNext()){System.out.println(it.next());al.add("c++");//异常,并发修改异常。集合、迭代器同时操作同一组数据}此时要使用Interator的子类ListInterator。
六、泛型
1、jdk1.5之后出现的新特性,解决集合储存对象的安全隐患
2、利弊
利:(1)将运行时期出现的ClassCastException转移到编译时期;
(2)避免了强制转换的麻烦。
弊:不能使用特定类型中的方法。
3、使用
(1)将泛型定义在类上
class Demo<T>{ public void show(T t){}public <Q> void method(Q q){}}(2)将泛型定义在方法上;
public <T> void show(T t){}(3)将泛型定义在接口上
4、注意事项
<?>通配符、占位符
泛型限定:(上限)<? extends Person> //可以接受Person及其子类型
(下限)<? super Student> //可以接受Student及其父类
ArrayList<Person> al = new ArrayList<Student>();//错误,前后必须一致,继承也不行
- 黑马程序员--Java学习笔记之集合框架
- 黑马程序员—Java学习笔记之集合框架(一)
- 黑马程序员—Java学习笔记之集合框架(二)
- 黑马程序员-java学习笔记-集合框架
- 黑马程序员--java学习之集合框架
- 黑马程序员------java学习笔记之集合
- 黑马程序员---java学习笔记之集合
- 黑马程序员java学习笔记之三(java集合框架类)
- JAVA集合框架 黑马程序员学习笔记(11)
- 黑马程序员 JAVA学习笔记 ——集合框架
- 黑马程序员 java学习笔记——集合框架1
- 黑马程序员 java学习笔记——集合框架2
- 黑马程序员java学习笔记——集合框架
- 黑马程序员——java学习笔记--集合框架
- 黑马程序员—Java学习笔记之集合框架(三)以及1.5新特性
- 黑马程序员----集合框架学习笔记
- 黑马程序员-集合框架学习笔记-1
- 黑马程序员 java集合框架笔记(一)
- 对象属性的查找顺序
- prototype方式继承
- 犀牛书第五版读书笔记——Chapter 2. Lexical Structure
- 犀牛书第五版读书笔记——Chapter 3. Datatypes and Values
- 犀牛书第五版读书笔记——Chapter 4. Variables
- 黑马程序员--Java学习笔记之集合框架
- 使用 HTML5 WebSocket 构建实时 Web 应用
- 犀牛书第五版读书笔记——Chapter 5. Expressions and Operators
- 犀牛书第五版读书笔记——Chapter 6. Statements
- 犀牛书第五版读书笔记——Chapter 7. Objects and Arrays
- 犀牛书第五版读书笔记——Chapter 8. Functions
- TP-link 无线路由器WDS设置方法图解_无线桥接设置
- 犀牛书第五版读书笔记——Chapter 9. Classes, Constructors, and Prototypes(第一部分)
- 犀牛书第五版读书笔记——Chapter 9. Classes, Constructors, and Prototypes(第二部分)