黑马程序员——JAVA学习笔记——类集——(List,Set)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

类集

所谓的类集就是一个动态的对象数组,是对一些实现好的数据结构进行了包装,这样在使用时非常方便,而且最终要的是类集框架本身不受对象数组长度的限制。

类集框架被设计成拥有一下几个特性:

   1、这种框架是高性能的,对基本类集(动态数组、链接表、树和散列表)的实现是高效的。所以一般很少需要人工去对这些“数据引擎”编写代码。

   2、框架必须允许不同类型的类集以相同的方式和高度互操做方式工作。

   3、类集必须是容易扩展和修改的,为了实现这一目标,类集框架被设计成包含了一组标准接口。

JAVA中集合类的关系图:

 

1、 Collection 接口

   Collection接口是集合的最大接口,但是用其进行操作表示的意思不明确。其在开发中主要使用的是其子类接口:

1、 List:可以存放重复的内容。

2、 Set:不能存放重复的内容,所有的重复内容靠hashCode()和equals()两个方法区分。

3、 Queue:队列接口。

4、 SortedSet:可以对集合中的数据进行排序。

1.1 List接口:

        A、ArrayList 子类

       ||-增加元素方法:public boolean add(E o)

       ||-增加一组元素:public boolean addAll(Collection<? extends E>c)

       ||-在指定位置增加元素:public boolean add(E o)

       ||-每次删除一个对象:public boolean remove(Object o).

       ||-每次删除一组对象:public E remove(int index)。

       ||-获取长度:size()

       ||-获取指定位置的元素: get(int index)

样板代码:

import java.util.ArrayList ;

import java.util.List ;

import java.util.Collection ;

public class Test{

    public static void main(String args[]){

       List<String> allList = null ;

       Collection<String> allCollection = null ;

       allList = new ArrayList<String>() ;    // 指定操作的泛型为String

       allCollection = new ArrayList<String>() ; // 指定一个集合

       allList.add("Hello") ;   // 此方法由Collection接口而来

       allList.add(0,"World") ; // 在第一个位置上添加新的内容

       System.out.println(allList) ;

       allCollection.add("LZZ") ;  // 向Collection中加入内容

       allCollection.add("www.csdn.cn") ;

       allList.addAll(allCollection) ;

       allList.addAll(0,allCollection) ;

       allList.remove(0) ; // 删除第一个元素,指定删除的位置

       allList.remove("Hello") ;   // 此方法由Collection接口继承而来

       System.out.println(allList) ;

       System.out.print("由前向后输出:") ;

       for(int i=0;i<allList.size();i++){

           System.out.print(allList.get(i) + "、") ;

       }

       System.out.print("\n由后向前输出:") ;

       for(int i=allList.size()-1;i>=0;i--){

           System.out.print(allList.get(i) + "、") ;

       }

    }

};

注:与ArrayList 功能相似的类  Vector类

   其定义;

  Public class Vector<E>extends AbstractList<E>implements List<E>,RandomAccess,Cloneable,Serializable

此类与ArrayList类一样也继承AbstractList类

样板代码:

import java.util.Vector ;

import java.util.List ;

public class Test{

    public static void main(String args[]){

        List<String> allList = null ;

       allList = new Vector<String>() ;   // 指定操作的泛型为String

       allList.add("Hello") ;   // 此方法由Collection接口而来

       allList.add("Hello") ;   // 此方法由Collection接口而来

       allList.add(0,"World") ; // 在第一个位置上添加新的内容

       allList.add("MLDN") ;    // 向Collection中加入内容

       allList.add("www.mldn.cn") ;

       for(int i=0;i<allList.size();i++){

           System.out.print(allList.get(i) + "、") ;

       }

    }

};

ArrayList与Vector比较:

序号

比较点

ArrayList

     Vector

1

推出时间

JDK 1.2之后推出,属于新的操作类

JDK1.0推出

2

性能

采用异步处理方式,性能更高

采用同步处理方式,性能低

3

线程安全

属于非线程安全的操作类

属于线程安全的操作类

4

输出

只能使用Iterator、foreach输出

可以使用:Iterator、foreach

Enumeration输出

B.LinkedList 子类:

使用方法:

          ||-在链表开头增加元素:public void addFist(E o);

          ||-在链表结尾增加元素:public void addLast(E o);

          ||-在链表开头增加元素:public boolean offer (E o);

          ||-在链表开头增加元素:public E removeFist(E o);

          ||-在链表开头增加元素:public E removeList(E o);

 

样板代码:import java.util.LinkedList ;

public class Test{

    public static void main(String args[]){

       LinkedList<String> link = new LinkedList<String>() ;

       link.add("A") ;   // 增加元素

       link.add("B") ;   // 增加元素

       link.add("C") ;   // 增加元素

       System.out.println("初始化链表:" + link) ;

       link.addFirst("X") ; // 在开头增加数据

       link.addLast("Y") ;      // 在结尾增加数据

       System.out.println("增加头和尾之后的链表:" + link) ;

       System.out.println("1-1、element()方法找到表头:" + link.element()) ;

       System.out.println("1-2、找完之后的链表的内容:" + link) ;

       System.out.println("2-1、peek()方法找到表头:" + link.peek()) ;

       System.out.println("2-2、找完之后的链表的内容:" + link) ;

       System.out.println("3-1、poll()方法找到表头:" + link.poll()) ;

       System.out.println("3-2、找完之后的链表的内容:" + link) ;

       System.out.print("以FIFO的方式输出:") ;

       for(int i=0;i<=link.size()+1;i++){

           System.out.print(link.poll() + "、") ;

       }

    }

};

1.2 Set接口:

   Set接口中不能加入重复的元素

使用方法:   

         ||-HashSet  采用散列的存储方式,没有顺序

         ||-TreeSet   对输入的数据有序排列

样板代码:

 import java.util.HashSet ;

import java.util.TreeSet;

import java.util.Set ;

public class Test{

    public static void main(String args[]){

       Set<String> allSet1 = new HashSet<String>() ;

       allSet1.add("A") ;   // 增加内容

       allSet1.add("B") ;   // 增加内容

       allSet1.add("C") ;   // 增加内容

       allSet1.add("C") ;   // 重复内容

       allSet1.add("C") ;   // 重复内容

       allSet1.add("D") ;   // 增加内容

       allSet1.add("E") ;   // 增加内容

       System.out.println(allSet1) ;

       Set<String> allSet2 = new TreeSet<String>() ;

       allSet2.add("A") ;   // 增加内容

       allSet2.add("B") ;   // 增加内容

       allSet2.add("C") ;   // 增加内容

       allSet2.add("C") ;   // 重复内容

       allSet2.add("C") ;   // 重复内容

       allSet2.add("D") ;   // 增加内容

       allSet2.add("E") ;   // 增加内容

       System.out.println(allSet2) ;

    }

};

根据以上的内容自己的总结:

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

 

|--Set:无序(存入和取出顺序有可能不一致),不可以存储重复元素。必须保证元素唯一性。

1、添加: 

add(object):添加一个元素 

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

 2、删除: 

clear():将集合中的元素全删除,清空集合。 

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

 3、判断: 

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

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

  4、获取: 

int size():集合中有几个元素。

 5、取交集: 

boolean  retainAll(Collection) :对当前集合中保留和指定集合中的相同的元素。如果两个集合元素相同,返回flase;如果retainAll修改了当前集合,返回true。

6、将集合变成数组:

 toArray(); 

 

 

 

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值