java学习笔记(五)类集框架

1.类集框架的核心接口:Collection List Set Map Iterator Enumeration

     Collection:代表一组对象,每一个对象都是它的子元素。
     Set:不包含重复元素的Collection。
     List:有顺序的collection,并且可以包含重复元素。
     Map:可以把键(key)映射到值(value)的对象,键不能重复。

2.迭代器:

     Iterator提供了对很多集合元素进行迭代的方法,每一个集合类都包含了可以返回迭代器实例的迭代方法。

     Iterator定义了两个方法:

              1.hasNext():判断是否还要内容

              2.next():取出当前内容

   双向迭代:ListIterator   常用方法:

               1.hasPervious()判断是有前一个元素

               2.pervious()取出前一个元素

                3.add() 向集合追加元素

               4.set()修改集合元素

  foreach也可以进行输出如:

        for(String str:all)  printf(str);

问答题:Iterator和ListIterator的区别是什么?

terator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。
Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。
ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。

Enumeration接口和Iterator接口的区别有哪些?

 Enumeration速度是Iterator的2倍,同时占用更少的内存,但是Iterator更加安全,因为其他线程不能修改正在被iterator遍历的对象,同时iterator允许调用者删除底层集合里面的元素,这对enumeration来说是不可能的

3.Colection

     Collection是进行单对象保存的最大父接口,即每次利用Collection只能保存一个对象信息。

重要方法: add(向集合里保存元素)和Iterator (为接口实例化)Collection接口无法区分保存的数据是否重复

    list接口和set接口是其两个子接口

4.List接口:

           保存的数据可以存在重复内容。

            Array和ArrayList的区别:

               Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。
               Array大小是固定的,ArrayList的大小是动态变化的。
               ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等
等。

           ArrayList和LinkedList的区别:

              1. ArrayList和LinkedList都实现了List接口 ArrayList是基于索引的数据接口,它的底层是数组。访问某个元素的时间复杂度是O(1)

              2.LinkedList是以元素列表的形式存储数据,它的每一个元素都和它的前一个和后一个元素链接在一起,查找某个元素的时间复杂度是O(n)

              3.LinkedList的插入,删除,添加元素的速度更快,比ArrayList更占内存,因为一个节点存储了两个引用,一个指向前一个元素,一个指向后一个元素。

5.set接口:

        set接口无法使用get方法 set接口下有两个子类:HashSet、HashMap

         HashSet是散列存放数据,而TreeSet是有序存放数据

        set集合中不允许保存重复数据

        TreeSet的排序是依照比较器接口(Comparable)实现的,如果要利用treeset子类保存任何类的对象,该对象所在的类必须实现java.lang.comparable

  list、map、set、vector等集合类型都是可以存放null的。 

TreeSet利用Comparable接口实现重复元素的判断,而HashSet如果要消除重复元素,则:

       1.去得哈希码:public int hashCode();

            判断对象的哈希码是否相同,依靠哈希码取得一个对象的内容

      2.对象比较:public boolean equals(Object obj)

             再对对象的属性进行比较

HashSet中为什么不允许放重复的值

Hashcode()方法的作用: 哈希算法,将集合分成若干个区域,每个对象在放入集合之前由计算

机计算出一个哈吸码,可以将哈希码分组,每组分别对应某个区域,根据一个对象的哈希码可以

确定该对象应存储在哪个区域。当再次向哈希表中存入对象的时候,依旧这样儿运算,但可以快

速的判断里面是否有与现在要存的对象相同的,如果有则不能对此对象进行存储
 

HashSet和TreeSet有什么区别?

     HashSet是由一个hash表来实现的,因此,它的元素是无序的。add(),remove(),continans()方法的时间复杂度是O(1)

    TreeSet是由一个树形的结构来实现的,它里面的元素是有序的,add(),remove等方法的时间复杂度是O(n)

  hashCode和equals:

 hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致,那么equal()既然已经能实现对比的功能了,为什么还要hashCode()呢?

      因为重写的equal()里一般比较全面比较复杂,这样效率就比较低,而利用hashCode()进行对比,则只要生成一个hash值进行比较就可以了,效率很高,那么hashCode()既然效率这么高为什么还要equal()呢?
     因为hashCode()并不是完全可靠,有时候不同的对象他们生成的hashcode也会一样(生成hash值得公式可能存在的问题),所以hashCode()只能说是大部分时候可靠,并不是绝对可靠,所以我们可以得出:

         1.equal()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的。         2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。 

6.Map

利用map集合可以保存一对关联数据

常用方法:

       1.put() 向集合中保存数据

       2.get()利用key查找对应的value数据

       3.entryset()将map集合转化为set集合

      4.keySet ()取出全部的key

特点:

     1.使用hashMap定义的map是无序的

     2.如果发现重复的key会进行覆盖,使用新的内容替换旧内容

     3.保存数据时key或value可以保存为null

hashmap和hashtable的区别:
HashMap允许键和值是null,而Hashtable不允许键或者值是null。
Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。
HashMap提供了可供应用迭代的键的集合,因此,HashMap是快速失败的。另一方面,Hashtable提供了对键的列举(Enumeration)。

 

猜你喜欢

转载自blog.csdn.net/weixin_42173193/article/details/87884818