黑马程序员-------集合框架之Collection

来源:互联网 发布:linux 流媒体服务器 编辑:程序博客网 时间:2024/06/05 03:34

------- <a href="http://www.itheima.com"target="blank">android培训</a>、<a href="http://www.itheima.com"target="blank">java培训</a>、期待与您交流! ----------


集合框架之Collection

集合,是用于存储数据的容器。

(对象多了用集合存(或数组),数据多了用对象存),所以要明确一点,集合用于存储

对象。

集合与数组的区别:

1. 数组长度固定,集合长度可变。

2. 数组可以存储任何数据类型,集合只能存储引用数据类型。

3. 数组存储的元素必须是同一数据类型,集合存储的对象可以是不同数据类型。

 

集合体系大致分为:

Collection
|---List

     |---LinkedList
     |---ArrayList
     |---Vector
 
|---Set

     |---HashSet

     |---TreeSet

(本篇未涉及)

Map
     |---TreeMap

     |---HashMap


如上,集合框架产生出这么多容器的原因是:每一个容器对数据的存储方式不同,这种存储方式就称之为数据结构。

 

1.Collection接口

Collection是最基本的集合接口Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection子接口ListSet

2.集合共性方法:

add(object):添加一个元素 

addAll(Collection) :添加一个集合中的所有元素。

clear():移除此 collection 中的所有元素,清空集合

remove(obj) :删除集合中指定的对象。注意:删除成功,集合的长度会改变。 removeAll(collection) :删除部分元素。部分元素和传入Collection一致。

boolean contains(obj) :集合中是否包含指定元素 。 

boolean containsAll(Collection) :集合中是否包含指定的多个元素。 

boolean isEmpty():集合中是否有元素。

int size():返回此 collection 中的元素数。

 toArray(); 返回包含此 collection 中所有元素的数组。

等等

 3.Iterator接口:

其中获取集合中所有元素:Iterator  iterator():迭代器

每个集合都有自己的数据结构,那么取出自己内部元素的方式也不同,那么这种取出方式就被定义成了内部类,但是共性是判断,取出。所以这些在不同集合中的内部类都符合一个规则,该规则就是Iterator,获取集合的取出对象的方法就是iterator()方法。即遍历Collection中的每一个元素,不论Collection的实际类型如何,它都支持一个该iterator()方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:
    Iteratorit = collection.iterator(); //获得集合中一个迭代对象

              while(it.hasNext()) {
      Objectobj = it.next(); // 得到下一个元素
    }

4.List接口:

List:有序(元素存入集合的顺序和取出的顺序一致),因为元素都有索引,所以可重复

    |--ArrayList:底层的数据结构是数组,特点:查询速度很快,增删慢,线程不同步,效率高。

    |--LinkedList:底层的数据结构是链表,增删元素的速度很快,查询慢,线程不同步。

    |--Vector:底层的数据结构就是数组,线程同步,ArrayList替代了Vector。


List接口中凡是可以操作角标的方法都是其特有方法

 

add(index,element) :在指定的索引位插入元素。 

addAll(index,collection) :在指定的索引位插入一堆元素。 

 

remove(index) :删除指定索引位的元素。 返回被删的元素。 

改 

Object set(index,element) :对指定索引位进行元素的修改。 

Object get(index) :通过索引获取指定元素。 

 int indexOf(obj) :获取指定元素第一次出现的索引位,如果该元素不存在返回-1;  

 所以,通过-1,可以判断一个元素是否存在。 

 int lastIndexOf(Object o) :反向索引指定元素的位置。

 List subList(start,end) :获取子列表,包含头不包含尾 

 ListIterator listIterator():list集合特有的迭代器。

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

下面关于 listIterator()的介绍

ListIterator是List集合特有的迭代器,是Iterator的子接口。Iterator接口只有三个有限的方法,只能对元素进行判断,取出,删除操作,如果想要其他操作,如添加,修改等(注意:在迭代时不可以通过集合对象的方法操作集合中的元素,否则会发生ConcurrentModificationException并发修改异常),就可以用到子接口ListIterator该列表迭代器接口也具备对元素的增、删、改、查的操作。

package com.gzj.jihe;/* *ListIterator迭代器用法 */import java.util.ArrayList;import java.util.*;public class ListDemo {public static void main(String[] args) {// TODO Auto-generated method stubList li = new ArrayList();li.add("java01");li.add("java02");li.add("java03");li.add("java03");ListIterator it =li.listIterator();while(it.hasNext()){Object obj = it.next();if(obj.equals("java01")){it.set("java04");//ListIterator迭代器的方法it.add("java05");}}System.out.println(li);}}

知识点注意:对于list集合,底层判断元素是否相同,其实用的是元素自身的equals方法完成的。所以建议元素都要复写equals方法,建立元素对象自己的比较相同的条件依据。

 5.Set接口:

Set接口:元素无序(取出和存入的顺序不一定一致),元素不可重复

 |--HashSet:底层数据结构是哈希表,线程是不同步的,不安全的。 

HashSet集合保证元素唯一性:通过元素的两个方法hashCode和equals方法。 当元素的hashCode值相同时,才继续判断元素的equals是否为true。 如果为true,那么视为相同元素,不存。如果为false,那么存储。 如果hashCode值不同,那么不判断equals,从而提高对象比较的速度。 (另写日志有示例分析)

另外,对于判断元素是否存在,删除等操作,依赖的都是hashCode和equals方法。     

    |--LinkedHashSet:有序,hashset的子类。 

|--TreeSet:对Set集合中的元素的进行指定顺序的排序。不同步。TreeSet底层的数据结构是二叉树。

TreeSet存储字符串(元素本身是具备比较性的)示例: 

package com.gzj.jihe;/* * TreeSet默认按自然顺序排序*/import java.util.Iterator;import java.util.TreeSet;public class TreeDemo {public static void main(String[] args) {// TODO Auto-generated method stubTreeSet ts = new TreeSet();ts.add("abd");ts.add("abcd");ts.add("bc");Iterator it = ts.iterator();while(it.hasNext()){it.next();}System.out.println(ts);}}


0 0
原创粉丝点击