java基础之集合

原创 2015年11月18日 22:56:57
1. Collectiton:单列存储集合
|--- List 元素是有序的,元素可以重复。因为该集合体系有索引  
|--- ArrayList: 底层的数据结构使用的是数组结构       特点:数组元素查询很快,但是增删很慢,因为增删一个元素,数组后面的其他元素都需要变动,线程不同步
|--- LinkList: 底层的数据结构使用的是链表数据结构 特点:链表查询比较慢,反正与 数据结构 相反
|--- Vector: 底层是数组数据结构 特点:其他与 ArrayList 相同,但是 线程同步,被前者替代了
|--- Set 元素是无序的(存入和取出的顺序不一定一致),元素不可以重复
|--- TreeSet:  可以对 Set 集合中的元素排序,底层数据结构是二叉树。  保证元素的唯一性的一句 compareTo 方法 return 0

TreeSet 排序的第一种方式:让元素自身具备比较性,元素需要实现 Comparable 接口实现 compareTo 方法。这种方式也成为元素的顺序。也即是默认顺

TreeSet 排序的第二种方式:当元素不具备比较性时,或者具备的比较性不符合要求。这就要求集合自身具备比较性
在集合初始化时,就让其拥有比较方式
当两种排序都存在时,以比较器为主

|--- HashSet: 底层数据结构是哈希表,线程不同步          
HashSet 是如何保证元素的唯一性:
是通过元素的两个方法,HashCode 和 equals 来完成的
如果元素 HashCode 相同,才会判断 equals 是否为 true
如果元素 HashCode 不相同,就不会调用 equals 方法

注意: 对于判断元素是否存在,以及删除等操作,依赖的方法是元素的 hashCsode() 和 equals() 方法

List 集合判断元素是否相同,依据的是元素的 equals() 方法    ArrayList; 注意它们的区别

 Map 集合:该集合存储键值对,而且要保证键值的唯一性 双列存储集合
|--- HashMap: 底层是哈希表数据结构,允许使用 null 键 null 值。该集合是不同步的 JDK 1.2 效率高
|--- TreeMap: 底层是二叉树数据结构,线程不同步。可以用于给 Map 集合中的键进行排序。 和 Set 很像,Set 底层就是使用 Map集合 
|--- Hashtable: 底层是哈希表数据结构,不可以存入 null 键 null 值。该集合是线程同步的; JDK 1.0 效率低
 
1.添加
put( key , value)
2.删除
clear() remove( Object key)
3.判断
containsKey( Object Key) containsValue( Object Value) isEmpty()
4.获取
get( Object key) size() Values()

KeySet():将 Map 中所有的键存入 Set 集合,在利用迭代器方法取出键值,最后根据 get() 方法取出每一个键值对应的值

entrySet():

2. 集合框架   Collection   List    Set   ArrayList   LinkList   Vector   TreeSet   HashSet

ArrayList:
1.add()的参数类型是 Object。以便于接收任意对象    2.集合中存储的都是对象的引用

当我们使用数组时候,长度是固定的。这样让我们有时候使用感觉很麻烦,所以后面就定义了集合;集合可以随着存储元素的增加而增加,也可以随着元素的减少而减少。

数组和集合的区别:

数组:数组既可以存储基本数据类型,也可以存储引用数据类型;存储基本数据类型的时候存储的是值,存储引用基本数据类型的时候存储的地址;数组的长度是固定的,不可变的。

集合:集合只能存储引用数据类型,不过也可以存储基本数据类型(因为JDK新特性,会进行自动装箱;把存储的基本数据类型包装成对象)。集合的长度是可变的,可以随着元素自
动增加。

集合遍历:数组遍历;迭代器遍历

3. 迭代器接口   iterator:

Iterator it = array.iterator();   获取迭代器,用于取出集合元素

就把取出方式定义在集合的内部,这样取出方式就可以直接访问集合内部的元素。

那么取出方式就被定义成了内部类。而每个容器的数据结构不同,所以取出的动作细节也不一样。但是都有共性内容判断和取出。那么可以将共性抽取。

那么这个内部类都符合一个规则,这个规则就是 Iterator 

如何获取集合取出对象? 通过一个对外提供的方法 iterator()

for( Iterator it = vec.iterator() ; it.hasNext() ; )
{
show( it.next());
}

迭代器是对集合进行遍历,而每个集合内部的存储结构都是不同的;所以每一个集合存和取都是不同的,这样就可能会要在每一个类中都定义 hasNext() 和 next() 方法。这样就会
让整个集合体系变得非常的臃肿。迭代器就是将这些方法向上抽出为接口,然后各个类实现接口的方法。

好处:规范了集合的遍历方式,整个集合体系都是使用 hasNext() 和 next() 方法来进行遍历;代码实现了底层封装实现,这样使用者不用知道怎么实现的,只要知道使用即可。

4. List:元素是有序的,元素可以重复。因为该集合体系有索引   

   Set:元素是无序的,元素不可以重复

List:凡是可以操作角标的方法都是该体系特有的方法

List 特有的迭代器 ListIterator: 列表迭代器(是 Iterator 的子接口)

5. List集合:

包括 ArrayList , LinkedList , Vector ;

List 集合的特有功能:
void add(int index,E element)
E remove(int index)
E get(int index)
E set(int index,E element)

Vector 特有功能:
public void addElement(E obj)
public E elementAt(int index)
public Enumeration elements()

数组和链表的区别:数组查找快但是增删慢;链表查找慢,但是增删快;

ArrayList:底层数据结构是数组,查找快增删慢;线程不安全,但是效率高。

Vector: 底层数据结构是数组,查找快增删慢;线程安全,但是效率不高;

LinkedList: 底层数据结构是链表,查找慢增删快;线程不安全,效率高;

ArrayList 和 Vector 的区别:底层数据结构都是数组;但是前者线程不安全,效率高;后者线程安全的,效率低。

ArrayList 和 LinkedList 的区别:前者底层数据结构是数组,后者底层数据结构是链表;前者数据查找快,增删慢;后者数据查找慢,增删快。但是都是线程不安全。

使用规则:如果查询数据多使用 ArrayList;如果数据修改多使用LinkedList;如果都多使用ArrayList。

6.枚举就是 Vector 特有的取出方式。其实枚举和迭代器很像,简单说就是一样的。

只是因为枚举的名字以及方法的名称太长了,所以逐渐被迭代器所取代

for( Enumeration en = vec.elements(); en.hasMoreElements() ; )
{
show( en.nextElement());
}

7. List 集合判断元素是否相同,依据的是元素的 equals() 方法    ArrayList

8. Set 集合的功能和 Collection集合功能是一致 

9. 当排序的时候,主要条件相同时,一定要判断一下次要条件

10. Collections 集合(是一个集合框架工具类):所有方法都是静态的,对集合进行操作的工具类。  

Collections.sort();    Collections.max();   Collections.binarySearch();   Collections.fill();    Collections.reverse()

Collections.reverseOrder();   Collections.reverseOrder( 也可以传一个比较器当参数);

11.把数组转换成集合有什么好处: 可以使用集合的思想和方法来操作数组中的元素    注意:将数组转换成集合,不可以使用集合的增删方法操作。因为数组的长度是固定的

为什么要把集合转换成数组:  为了限定对元素的操作,此时元素不需要进行增删

12.高级 for 循环:      for( String s : array)
{
System.out.println( s);
}
对集合进行遍历的时候,只能获取元素。但是不能对集合进行操作

迭代器除了遍历外,还可以进行 remove() 集合中元素的操作

ListIterator 可以遍历,还可以进行增删集合元素的操作

13.JDK 1.5版本出现的新特性: 可变参数,其实就是传递数组参数的简写形式,不用每次都去新建一个数组,而可以直接传递数据元素

注意:可变参数 一定要定义在参数列表的最后面

StaticImport 静态导入。   当类名相同时,需要指定具体的包名;
当方法名相同时,需要指定所属的对象或者类 

14.System:类中的方法和属性都是静态的

获取系统属性信息:   Properties getProperties();

15.Math.ceil(); 返回大于指定数据的最小整数    Math.floor();返回小于指定数据的最大整数  Math.round();四舍五入    Math.pow( 2,3);输出8   二的三次方


Math.random();随机数  返回大于等于0且小于1的随机数













Java基础之集合类常见试题

1、Collection和Collections的区别 java.util.Collection 是一个集合接口,Collection接口在Java类库中有很多具体的实现,例如List、Set ...
  • wodemingzibu
  • wodemingzibu
  • 2015年07月25日 15:32
  • 1147

Java基础加强之集合篇(模块记忆、精要分析)

千里之行,始于足下。把别人的变成自己,再把自己的分享给别人,这也是一次提升的过程。本文的目的是以一篇文章从整体把握集合体系又不失一些细节上的实现,高手路过。 集合的作用与特点 Java是一门面向对...
  • whm114336793
  • whm114336793
  • 2017年02月22日 12:13
  • 512

黑马程序员——Java基础视频笔记(五):集合详解

------- android培训、java培训、期待与您交流! ---------- 集合详解: Collection接口:List接口、Set接口 Iteractor接口 Map接...
  • u014446479
  • u014446479
  • 2015年05月01日 01:37
  • 292

java基础——图解集合

collection为了满足应用需求,他有划分,可以存储重复元素的和不可以重复元素的,有序的或者无序的,最终体现在了他的子接口,定义了一个可以存储重复元素的规则以及不允许重复元素的规则 一、list...
  • siyemuzi
  • siyemuzi
  • 2015年03月18日 23:06
  • 632

Java基础之集合知识点总结一

集合----是用于存储对象的一个工具,集合和数组的特点
  • u011460827
  • u011460827
  • 2014年12月02日 12:40
  • 722

Java基础总结(二)----集合、多线程、io、虚拟机等

Java集合java集合框架的结构List接口List接口通常表示一个列表(数组、队列、链表、栈等),其中的元素可以重复,常用实现类为ArrayList和LinkedList,另外还有不常用的Vect...
  • wgyscsf
  • wgyscsf
  • 2017年04月04日 22:32
  • 1646

Java基础——集合(一)——集合体系、Collection集合

一、集合概述          Java是一种面向对象语言,如果我们要针对多个对象进行操作,就必须对多个对象进行存储。而数组长度固定,不能满足变化的要求。所以,java提供了集合。          ...
  • haovip123
  • haovip123
  • 2015年05月02日 00:09
  • 12196

Java基础之List集合原理(一)

1.我们都知道,Java基础里面有一块知识非常重要,在我们的开发中也是经常使用,这块知识就是集合,那么我们回顾一下集合的层级结构 从图中我们看到了集合的顶层是Collection接口,可以理解为这是...
  • u011692041
  • u011692041
  • 2015年11月14日 19:26
  • 2766

Java基础(集合框架——Collection、List、Set、泛型)

为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多 个对象的操作,就对对象进行存储,集合就是存储对象常用的一 种方式。 数组和集合类同是容器,有何不同? 数组...
  • zzamk
  • zzamk
  • 2015年03月18日 19:03
  • 995

java基础复习(集合、泛型、IO流、多线程、Junit 、内省 、Properties、 路径问题)

集合---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList: 数组实现, 查找快, 增删慢 ...
  • guanhang89
  • guanhang89
  • 2016年04月25日 11:29
  • 4279
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java基础之集合
举报原因:
原因补充:

(最多只允许输入30个字)