您的位置:首页 > 其它

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

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

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

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!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: