您的位置:首页 > 职场人生

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

2015-03-21 17:51 459 查看
------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培训、期待与您交流! -------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐