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方法一致返回相同的整数]

 

posted @ 2020-05-18 17:41  CherryYang  阅读(110)  评论(0编辑  收藏  举报