Collection:定义了存取一组对象的方法,其子接口Set和List分别定义了储存方式
Set:数据对象无顺序且不可重复
list:数据对象有顺序且可重复(及两个对象equals)
Map:定义了存储“”键(key)- 值(value)映射 对“的方法
Iterator对象的remove方法是在迭代过程中删除元素的唯一的安全方法
除了简单遍历并读取其中的内容外,不建议使用foreach循环
ArrayList:底层为数组
LinkedList:底层为链表
Set(底层 hash表)
特点:
- 不包含重复元素的集合
- 没有待索引的方法,所以不能使用普通for循环遍历
//Set方法举例
package Test;
import java.util.HashSet;
import java.util.Set;
public class demo4 {
public static void main(String[] args) {
Set<String> s1 = new HashSet<>();
Set<String> s2 = new HashSet<>();
s1.add("a");
s1.add("b");
s1.add("c");
s2.add("d");
s2.add("a");
s2.add("b");
//Set和List容器类都具有Constructor(Collection c)
//构造方法用以初始化容器类
Set sn = new HashSet(s1);
sn.retainAll(s2);//取并集
Set su = new HashSet(s1);
su.addAll(s2);
System.out.println(sn);
System.out.println(su);
}
}
List
List常用算法(java.util.Collections)
类java.util.Collections提供了一些静态方法实现了基于List容器的一些常用算法
如何选择数据结构
- 衡量标准:读的效率和改的效率
- Array读快改慢
- Linked改快读慢
- Hash两者之间
LinkedList
LinkedHashSet
LinkedHashSet集合特点
- 哈希表和链表实现的Set接口,具有可预测的迭代次序
- 由链表保证元素有序,也就是说元素的储存和去除顺序是一致的
- 由哈希表保证元素唯一,也就是说没有重复的元素
Map
TreeMap(二叉树):
HashMap():
哈希值
概念:是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
同一对象多次调用hashCode()方法返回的哈希值是相同的
默认情况下,不同对象的哈希值是不相同的
通过重写,可以实现不同对象的哈希值是相同的
HashSet集合保证元素唯一性
哈希表
链表+数组