Java集合二
Java 1.0版本中的 集合 vector 集合的方法elements()得到迭代器 同步 线程安全的集合
Java 1.2版本 集合Collection 集合的方法iterator()得到迭代器 异步 线程不安全的集合
Collection
List 有索引 有序 集合内元素可重复 且不要在遍历集合过程中 对集合的长度进行变更 会出现异常// java.util.ConcurrentModificationException 并发修改异常
迭代方式有三种 for+索引 迭代器 增强for
ArrayList 数组结构的集合 查找快 但增删慢 默认初始容量initialCapacity为10
LinkedList 链表结构的集合 查询慢 但增删快
Set 无索引 无序 集合内元素不可重复
迭代方式有两种 for+索引 迭代器 增强for
HashSet(==HashMap) 哈希表 默认初始容量initialCapacity为16 加载因子 loadFactor0.75 16*0.75=12 当集合中元素达到12时 集合扩容 内存复制 底层使用System.arraycopy() 元素是无序的
集合中元素不重复! 不重复的依据是 元素类型的hashCode 和 equals方法的返回结果 ,如果集合中的元素是自定义类,若类equals方法不重写,则使用了对象地址进行判断 equals返回false -元素不重复
LinkedHashSet 基于链表的哈希表 继承自HashSet 在HashSet的基础上 具有有序性(存、取的顺序一致)
与索引相关的方法
add( int index, E element) //将元素插入到列表List的指定索引上 带索引操作防止越界问题java.lang.IndexOutOfBoundsException
remove(int index) // 移除指定索引上的元素 返回被此删除的元素
set( int index, E element)// 替换修改指定索引上的元素 返回被此替换的元素
get(int index) //获取元素
元素被添加到哈希表中的过程
两个对象 hashCode相同 他们的equals 一定返回true吗? 不一定!
//字符串的hashCode System.out.println("重地".hashCode()); //1179395 System.out.println("通话".hashCode()); //1179395
两个对象 他们equals返回true 那么他们的hashCode一定相同吗? 一定! [Java hashCode的常规协定 同一对象多次调用时 hashCode方法一致返回相同的整数]