集合



集合

一、集合的由来:

1、集合的由来:数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少

2、数组和集合的区别

区别1 :数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值。

             集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象

 区别2:数组长度是固定的,不能自动增长

         集合的长度的是可变的,可以根据元素的增加而增长

3、数组和集合什么时候用

             1,如果元素个数是固定的推荐用数组

          2,如果元素个数不是固定的推荐用集合

 

二、集合的遍历之集合转数组遍历

1、集合的遍历 其实就是依次获取集合中的每一个元素。

2把集合转成数组,可以实现集合的遍历

     

三、集合的遍历之迭代器遍历

1、迭代器概述:集合是用来存储元素,存储的元素需要查看,那么就需要迭代(遍历)

2迭代器的使用

             

                    Collectionc = new ArrayList();

                    c.add("a");

                    c.add("b");

                    c.add("c");

                    c.add("d");

                    

                    Iteratorit = c.iterator();                                    //获取迭代器的引用

                    while(it.hasNext()){                                               //集合中的迭代方法(遍历)

                           System.out.println(it.next());

                    }

      

四、迭代器的原理及源码解析

1、迭代器原理:迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()next()方法,这样做是可以的,但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上抽取出接口,然后在每个类的内部,定义自己迭代方式,这样做的好处有二,第一规定了整个集合体系的遍历方式都是hasNext()next()方法,第二,代码有底层内部实现,使用者不用管怎么实现的,会用即可

2、迭代器源码解析

      1)在eclipsectrl + shift + t找到ArrayList

      2ctrl+o查找iterator()方法

      3)查看返回值类型是new Itr(),说明Itr这个类实现Iterator接口

      4)查找Itr这个内部类,发现重写了Iterator中的所有抽象方法

 

五、并发修改异常的解决方案

      1、迭代器迭代元素,迭代器修改元素(ListIterator的特有功能add)

      2、集合遍历元素,集合修改元素

 

六、数据结构之数组和链表的区别:

1、数组

      查询快修改也快

      增删慢

2:链表

      查询慢,修改也慢

      增删快

 

七、集合框架List的三个子类的特点

1List的三个子类的特点

             ArrayList:

                    底层数据结构是数组,查询快,增删慢。

                    线程不安全,效率高。

             Vector:

                    底层数据结构是数组,查询快,增删慢。

                    线程安全,效率低。

             Vector相对ArrayList查询慢(线程安全的)

             Vector相对LinkedList增删慢(数组结构)

             LinkedList:

                    底层数据结构是链表,查询慢,增删快。

                    线程不安全,效率高。

 

             VectorArrayList的区别

                    Vector是线程安全的,效率低

                    ArrayList是线程不安全的,效率高

             共同点:都是数组实现的

             ArrayListLinkedList的区别

                    ArrayList底层是数组结果,查询和修改快

                    LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢

             共同点:都是线程不安全的

2List的应用:

             查询多用ArrayList

             增删多用LinkedList

             如果都多ArrayList

 

八、泛型的基本使用

1、泛型好处

       提高安全性(将运行期的错误转换到编译期)

      省去强转的麻烦

2、泛型基本使用

 <>中放的必须是引用数据类型

3、泛型使用注意事项

前后的泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型) 

 

九、三种迭代的能否删除

 普通for循环,可以删除,但是索引要--

迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常

增强for循环不能删除

 

十、可变参数的概述和使用

1、可变参数概述

 定义方法的时候不知道该定义多少个参数

2、格式

       修饰符返回值类型方法名(数据类型… 变量名){}

3、注意事项:

       这里的变量其实是一个数组

      如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个

 

十一、HashSet如何保证元素唯一性的原理

 1.HashSet原理

我们使用Set集合都是需要去掉重复元素的,如果在存储的时候逐个equals()比较,效率较低,哈希算法提高了去重复的效率,降低了使用equals()方法的次数

HashSet调用add()方法存储对象的时候,先调用对象的hashCode()方法得到一个哈希值,然后在集合中查找是否有哈希值相同的对象

  如果没有哈希值相同的对象就直接存入集合

 如果有哈希值相同的对象,就和哈希值相同的对象逐个进行equals()比较,比较结果为false就存入, true则不存

 2.将自定义类的对象存入HashSet去重复

       类中必须重写hashCode()equals()方法

      hashCode():属性相同的对象返回值必须相同,属性不同的返回值尽量不同(提高效率)

       equals():属性相同返回true,属性不同返回false,返回false的时候存储

 

十二、TreeSet原理的特点和使用方式

 1.特点

       TreeSet是用来排序的,可以指定一个顺序,对象存入之后会按照指定的顺序排列

 2.使用方式

       a.自然顺序(Comparable)

              TreeSet类的add()方法中会把存入的对象提升为Comparable类型

             调用对象的compareTo()方法和集合中的对象比较

          根据compareTo()方法返回的结果进行存储

       b.比较器顺序(Comparator)

          创建TreeSet的时候可以制定一个Comparator

             如果传入了Comparator的子类对象,那么TreeSet就会按照比较器中的顺序排序

             add()方法内部会自动调用Comparator接口中compare()方法排序

             调用的对象是compare方法的第一个参数,集合中的对象是compare方法的第二个参数

       c.两种方式的区别

              TreeSet构造函数什么都不传,默认按照类中Comparable的顺序(没有就报错ClassCastException)

              TreeSet如果传入Comparator,就优先按照Comparator

 

十三、Map集合概述和特点

1Map接口概述

              将键映射到值的对象

              一个映射不能包含重复的键

             每个键最多只能映射到一个值

2Map接口和Collection接口的不同

Map是双列的,Collection是单列的

 Map的键唯一,Collection的子体系Set是唯一的

       Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效

      

3Map集合的功能概述

a:添加功能

              V put(K key,V value):添加元素。

             如果键是第一次存储,就直接存储元素,返回null

             如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值

 b:删除功能

             voidclear():移除所有的键值对元素

             Vremove(Object key):根据键删除键值对元素,并把值返回

 c:判断功能

             booleancontainsKey(Object key):判断集合是否包含指定的键

              boolean containsValue(Object value):判断集合是否包含指定的值

              boolean isEmpty():判断集合是否为空

 d:获取功能

             Set<Map.Entry<K,V>>entrySet():

              V get(Object key):根据键获取值

              Set<K> keySet():获取集合中所有键的集合

              Collection<V> values():获取集合中所有值的集合

 e:长度功能

              int size():返回集合中的键值对的个数

4Map集合的遍历之键找值

键找值思路:

       获取所有键的集合

      遍历键的集合,获取到每一个键

      根据键找值

5Map集合的遍历之键值对对象找键和值)

键值对对象找键和值思路:

       获取所有键值对对象的集合

       遍历键值对对象的集合,获取到每一个键值对对象

       根据键值对对象找键和值

 

十四、HashMapHashtable的区别

              HashtableJDK1.0版本出现的,是线程安全的,效率低,HashMapJDK1.2版本出现的,是线程不安全的,效率高

              Hashtable不可以存储null键和null,HashMap可以存储null键和null

 

阅读更多
上一篇JAVA基础课总结九
下一篇反射
想对作者说点什么? 我来说一句

x-skin集合x-skin集合

2010年03月17日 10.19MB 下载

事件集合js事件集合js事件集合

2010年06月19日 628KB 下载

网络工具集合网络工具集合

2009年03月07日 6.55MB 下载

Hibernate帮助文档集合

2012年10月17日 8.33MB 下载

debugging tools

2017年10月27日 70.68MB 下载

Java集合 练习代码

2017年10月21日 28KB 下载

Java Generics and Collections

2018年05月09日 2.13MB 下载

户型集合户型集合户型集合

2014年09月27日 11.63MB 下载

FLEX资料集合 FLEX资料集合

2010年03月20日 11.26MB 下载

没有更多推荐了,返回首页

关闭
关闭