集合(对于集合学习后的个人总结和分析)

再接下来我会系统的整理和总结集合的不同点,重点和特点等等一一列举出来,有重点也有很细的其他知识点,有共同之处也有不同之处.但是都是个人学习的总结,可能学的一般般,但是我还在努力中~~~(不喜勿喷)


----------------------------------------------------------------------------------------------------------------------------------------------------------------

Collection(单例根接口)


  List(存取有序,有索引,可以重复)      JDK1.2才有的集合

ArrayList
底层是数组实现的,线程不安全,查找和修改快,增和删比较慢(重点掌握它的常用方法及其应用)


LinkedList
  底层是链表实现的,线程不安全,增和删比较快,查找和修改比较慢


  Vector
(枚举特有取出方式)JDK1.0就有了他比集合更早存在.

  底层是数组实现的,线程安全的,无论增删改查都慢(基本上被ArrayList取代了)
如果查找和修改多,用ArrayList
  如果增和删多,用LinkedList
如果都多,用ArrayList


注意:上面我只是列举类基本的特点,我需要声明的是一下知识点!

(我在这里只提供说明的具体方法,步骤就不一一写出来了之前有写过)


List集合的迭代方式:

第一种:

也是List集合特有的(不常用,但需要了解)

通过sinze()和get()方法遍历获取的


第二种:

通过迭代器 Iterator (必须掌握,在Map的集合中迭代也是可以的但是具体的方法下面介绍)


Iterator的子类ListIterator可以实现倒叙遍历 (但是没啥用只作为了解即可)


第三种:

JDK1.5新特性for循环遍历  (必须掌握,在Map的集合中迭代也是可以的但是具体的方法下面介绍)

格式如下:

for(数组或者Collection接口集合中的元素类型    变量名  :   数组或者Collection集合对象)   {

执行语句;

}


引起注意:在迭代的过程中,不能调用集合本身的方法来改变集合本身的数据结构(简单地说就是不能在遍历的时候增删元素),这样的并发操作是不允许的,不然回报:并发修改异常



  Set(存取无序,无索引,不可以重复)

HashSet

  底层是哈希算法实现
LinkedHashSet(HashSet的子类,是Set集合中唯一一个元素存取有序的集合
)

  底层是链表实现,但是也是可以保证元素唯一,和HashSet原理一样
  TreeSet
  底层是二叉树算法实现
  一般在开发的时候不需要对存储的元素排序,所以在开发的时候大多用HashSet,HashSet的效率比较高
  TreeSet在面试的时候比较多,问你有几种排序方式,和几种排序方式的区别


这里我想提是自定义类的对象存入HashSet去重复


1,类中必须重写hashCode()和equals()方法
2,hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)
3,equals(): 属性相同返回true, 属性不同返回false,返回false的时候存储


还有就是TreeSet存入对象的时候

  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(双例根接口)


  HashMap
  底层是哈希算法,针对键,线程不安全,效率高,jdk1.2版本就有了所以命名规范,可以存入null值

  LinkedHashMap (存取元素是有序的)   只做了解
  底层是链表,针对键,

Hashtable(基本上被HashMap替代)

底层是好像算法,线程不安全,效率低,JDK1.0版本的使用它的T都不是大写的因为那个时候还没有命名规范,不可以存入null值


  TreeMap
  底层是二叉树算法,针对键
  开发中用HashMap比较多


 引起注意:

1,HashMap键的位置存储自定义元素,想保证键唯一,依赖元素所属类的hashCode() 和 equals()

2,TreeMap集合键存储自定义对象,保证键唯一且实现排序:
自然顺序
比较器顺序


不难发现他们和set集合的常用子类集合存入  对象的时候需要的条件是一样的.所以学完set在学map比较容易,

因为是我只列举了集合常用的一些需要注意的和理解的地方,学的不多所以分享的有限,但是我on the way!




















你可能感兴趣的:(集合,个人学习分享总结)