每个元素只有一个值
ArrayList | LinkedList | |
---|---|---|
元素特点 | 有序、可重复、有索引 | 有序、可重复、有索引 |
底层实现 | 数组 | 双链表 |
使用策略 | 在意元素添加顺序,元素重复,频繁根据索引查询 | 在意顺序,元素重复,增删首尾数据较多 |
HashSet | LinkedHashSet | TreeSet | |
---|---|---|---|
元素特点 | 无序、不重复、无索引 | 有序、不重复、无索引 | 升序、不重复、无索引 |
底层实现 | 哈希表 | 哈希表 + 双链表 | 红黑树 |
使用策略 | 不在意元素添加顺序,无重复元素,增删改查快 | 在意添加顺序, … | 需要对元素排序,… |
Collection<String> c = new ArrayList<>();
//方式一,迭代器(只能遍历集合,不能遍历数组)
Iterator<String> it = c.iterator();
while(it.hasNext()){
String s = it.next();
}
//方式二,增强for循环(数组也能用)
String[] names={"奥特曼","小怪兽"};
for (String name : names) {
System.out.println(name);
}
//方式三,forEach方法,可结合lambda表达式简化
c.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
);
//简化:
c.forEach((String s) -> {
System.out.println(s);
});
//再次简化
c.forEach(s ->{
System.out.println(s);
});
//再再次简化
c.forEach(s -> System.out.println(s));
//再再再次简化
c.forEach(System.out::println);
键值对集合
.特点由 键 决定,值 只是附属品,没有要求
.
底层实现和Set一样,Set就是在调用Map,只不过只要键数据而已
.需要存储一一对应的数据时,就可以考虑使用Map集合来做
//方式一,键找值:
map.keySet()获取全部键,然后遍历获取对应值map.get(key)
//方式二,键值对:
Set<Map.Entry<K, V>> entries = map.entrySet() 获取所有“键值对”实体,
然后使用增强for循环通过 entry.getKey() 和.getValue() 进行遍历
//方式三lambda:BiConsumer
map.forEach(new BiConsumer<String, Double>() {
@Override
public void accept(String k, Double v) {
System.out.println(k,V);
}
);
//简写
map.forEach( (k,v) ->System.out.println(k+"--->"+v) );