Java数据结构-集合
HashSet
HashSet是基于HashMap实现的,它使用HashMap的键(key)来存储元素,而值(value)则是一个PRESENT常量。
在HashSet中,元素被存储为HashMap的键,而HashSet的add()方法实际上调用了HashMap的put()方法来将元素作为键放入HashMap中,
HashMap的键是基于hashCode()和equals()方法来判断的。
当你将一个元素放入HashSet时,HashSet首先会调用这个元素的hashCode()方法来获取其哈希码,然后通过哈希码找到对应的存储位置。如果这个位置没有其他元素,它就会直接存储。如果出现哈希码冲突(即不同元素产生了相同的哈希码),HashSet会使用equals()方法来检查这些具有相同哈希码的元素是否实际上相等(即equals()方法返回true),如果是,则视为重复元素不会被添加,如果不是,则会以某种方式处理冲突,一种常见的方式是使用链表或红黑树来存储具有相同哈希码但不相等的元素。
ArrayList
迭代器
ArrayList的 iterator()迭代器方法,重写了 AbstractList类的iterator()方法,该方法是一个默认实现的方法,返回一个Iterator接口的迭代器对象,该迭代器对象是在该文件中声明的一个类
ArrayList类中还有一个listIterator的迭代器方法,也和iterator()类似,也是List接口的方法,能双向遍历(在遍历的过程中可以查找后一个元素也可以查找前一个)
线程安全的集合类
如果一个迭代器在迭代的过程中被其他线程修改了原集合的数据,会抛出ConcurrentModificationException,并发修改异常;
可以使用线程安全的集合类,如ConcurrentHashMap Vector Stack CopyOnWriteArrayList
废话短说