list 和 set 是实现了 collection 接口的。
List :可以允许重复对象,插入多个 null 元素;是一个有序容器,元素的插入和输出都是有序。
ArrayList 使用索引随机访问,LinkedList 添加删除元素更合适。
Set :不允许重复对象,无需容器,只允许一个 null 对象;基于 HashMap 实现的 HashSet;TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序。

Map不是collection的子接口或者实现类。Map是一个接口。Map 的 每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的。Map 里你可以拥有随意个 null 值但最多只能有一个 null 键。

没看懂,TreeMap 也通过 Comparator 或者 Comparable 维护了一个排序顺序。
什么场景下使用list,set,map呢?
- list:有序访问、索引访问
- set(HashSet、LinkedHashSet 或者 TreeSet):去重
- map:键值存储
Map 的方法
new Map()
—— 创建 map。map.has(key)
—— 如果key
存在则返回true
,否则返回false
。map.delete(key)
—— 删除指定键的值。map.clear()
—— 清空 map。map.size
—— 返回当前元素个数。
get(Object key); 获取给定key对应的值。
put(Object key,Object value); 该方法会将原先Key所对应的键值对覆盖掉,即可以用该方法修改Map中的值。
containsKey(Object Key); 是否包含某个元素。通过配合get和put方法一起使用,来实现匹配并修改Map中的元素。
Set 的方法
Set
是一个特殊的类型集合 —— “值的集合”(没有键),它的每一个值只能出现一次。
它的主要方法如下:
new Set(iterable)
—— 创建一个set
,如果提供了一个iterable
对象(通常是数组),将会从数组里面复制值到set
中。set.add(value)
—— 添加一个值,返回 set 本身set.has(value)
—— 如果value
在 set 中,返回true
,否则返回false
。set.clear()
—— 清空 set。set.size()
—— 返回元素个数。set.contains(Object o)
Set.remove()
方法用于移除 Set 集合中的指定对象。该方法返回值为 boolean 类型 。相比delete ,推荐 remove
看数据结构的一些问题:
HashSet HashTree 搜索,删除,查询的复杂度是什么
HashTree : n次 搜索,删除,插入 操作。每次操作将耗费对数时间,即为 log(n)
HashSet :n 次 搜索,删除,插入 操作,每次操作都耗费常数时间。
Tree 和 map 和 set 都各有什么优点,link 删除添加操作简单,set 类似数组可以快速根据下标找到元素。
arrylist
add() 方法
没有指定下标的默认添加在最后面,指定下标按照最新的下标
1 | List<Integer> arr = new ArrayList<Integer>(); |