集合与数组的区别
区别 | 集合 | 数组 |
---|---|---|
长度 | 可变 | 固定 |
内容 | Object任意对象 | 单一固定 |
操作 | 灵活方便 | 通过下标 |
集合框架
List和Set的区别
- 相同点:都是Collection的子接口,都是单列集合
- 不同点
区别 | list | set |
---|---|---|
索引 | 有索引 | 无索引(没有get(int index) 方法) |
顺序 | 有序 | 无序 |
重复 | 元素可重复 | 元素不可重复 |
List(ArrayList、LinkedList、Vector)
遍历集合的三种方式
List<String> list = new ArrayList<>();
//普通for循环
for (int i = 0, size = list.size(); i < size; i++) {
String str = list.get(i);
}
//增强for循环
for (String str : list) {
System.out.println(str);
}
//迭代器
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
String str = iterator.next();
}
ArrayList和LinkedList的区别
区别 | ArrayList | LinkedList |
---|---|---|
底层结构 | 数组 | 链表 |
插入数据 | 慢 | 快 |
查询 | 快 | 慢 |
总结:如果要经常对数据进行查询搜索操作用ArrayList ,如果需要频繁删除和插入元素,用LinkedList。
ArrayList和Vector的区别
区别 | ArrayList | Vector |
---|---|---|
推出时间 | JDK1.2 | JDK1.0 |
性能 | 采用异步处理方式,效率高 | 采用同步处理方式,效率低 |
数据增长 | 容量不足时,扩充一半 | 容量不足时,扩充一倍 |
安全性 | 线程不安全 | 线程安全 |
Set(HashSet、TreeSet)
1.HashSet:底层是哈希表,线程不同步,无序、高效。
保证元素唯一性:通过元素的hashCode和equals方法。若hashCode的值相同,则会判断equals的结果是否为true;
hashCode不同不会调用equals方法。
LinkedHashSet:有序,是HashSet的子类。
2.TreeSet:底层是二叉树,可对元素进行排序,默认自然排序。
注意:TreeSet的有序是数值排序,与放入的顺序无关,而List的有序是指元素与放入的顺序一致。
Collection和Collections的区别
- Collection是java.util下的接口,它是各种集合的父接口,继承它的接口主要有Set和List。
- Collections是java.util下的类,是针对集合的帮助类,提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
Collections.shuffle(list);//打乱元素顺序
Collections.sort(list);//自然排序
Collections.reverse(list);//反转集合中的元素顺序
Map(HashMap,Hashtable)
Map 是 Key-Value 对映射的抽象接口,该映射不包括重复的键,即一个键对应一个值。
HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对。
LinkedHashMap:有序,是HashMap的子类。
HashMap和Hashtable的区别
区别 | HashMap | Hashtable |
---|---|---|
推出时间 | JDK1.2 | JDK1.0 |
性能 | 效率高 | 效率低 |
安全性 | 线程不安全 | 线程安全 |
还有什么方法可以用请查看源码,哪里不会点哪里。