Java 的List集合

什么是Java集合?

为了保存数量不确定的数据,以及保存具有映射关系的数据(也被称为关联数组),Java提供了集合类。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类,所有的集合类都位于java.util包下。

集合类和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象的引用变量);而集合里只能保存对象(实际上只是保存对象的引用变量,但通常习惯上认为集合里保存的是对象)。

Java的集合类主要由两个接口派生而出:Collection和Map,Colloection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。

 

Java的集合的作用?

Java集合类是一种特别有用的工具类,可用于存储数量不等的对象,并可以实现常用的数据结构,如栈、队列等。除此之外,Java集合还可用于保存具有映射关系的关联数组。Java集合大致可分为List、Set、Queue和Map四种体系,其中List代表有序、重复的集合;Set代表无序、不可重复的集合;而Map则代表具有映射关系的集合,Java5又增加了Queue体系 集合,代表一种队列集合实现。如下所示是java集合的简单结构图:

List常用方法:

返回值

方法(形参)

f说明

boolean

add(E e)

向列表的尾部添加指定的元素。

void

add(int index,E element)

在列表的指定位置插入指定元素。

 

boolean

 

addAll(Collection c)

添加指定collection中的所有元素到此列表的结尾,顺序是指定collection的迭代器返回这些元素的顺序。

boolean

addAll(int index,Collection c)

将指定collection中的所有元素都插入到列表中的指定位置。

void

clear()

从列表中移除所有元素。

Boolean

Contains(Object o)

如果列表包含指定的元素,则返回true

Boolean

ContainsAll(Collection c)

如果列表包含指定collection的所有元素,则返回true。

Boolean

Equals(Object o)

比较指定位置的元素。

E

Get(int index)

返回列表中指定位置的元素

Int

hashCode()

返回列表的哈希值

Int

indexOf(Object o)

返回此列表中第一次出现的指定元素的索引;如果此列表不包含元素,则返回-1。

Boolean

isEmpty()

如果列表不包含元素,则返回true。

Iterator

Iterator()

返回按适当顺序在列表的元素上进行迭代的迭代器。

Int

lastIndexOf(Object o)

返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回-1。

ListIterator

listIterator()

返回此列表元素的列表迭代器(按适当顺序)

ListIterator

listIterator(int index)

返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始

E

Remove(int index)

移除列表中指定的元素

Boolean

Remove(Object o)

从此列表中移除第一次出现的指定元素(如果存在)

Boolean

removeAll(Collection c)

从列表中移除指定collection中包含的其所有元素。

Boolean

retainAll(Collection c)

仅在列表中保留指定collection中所包含的元素。

E

Set(int index,E element)

用指定元素替换列表中指定位置的元素。

Int

Size()

返回列表中的元素数

List

subList(int fromIndex,int toIndex)

返回列表中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图

Object[]

toArray()

返回按适当顺序包含列表中的所有元素的数组(从第一个元素到最后一个元素)。

T[]

toArray(T[] a)

返回按适当顺序(从第一个元素到最后一个元素)包含列表中所有元素的数组;返回数组的运行时类型时指定数组的运行时类型

示例代码(以ArrayList为例)

public class ListDemo {

public static void main(String[] args) {

//list定义

// List list=new ArrayList();1.5之前的写法

List<String>list1=new ArrayList<String>();//<>里放的是类

//添加

list1.add("aa");list1.add("bb");list1.add("cc");

list1.add("dd");list1.add("ee");list1.add("ff");

//修改

list1.set(1, "bbb");

//删除

list1.remove(0);list1.remove("cc");

//遍历list

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

System.out.print(list1.get(i)+"\t");//get 获取集合里的一个对象

}

System.out.println();

for (String string : list1) {

System.out.print(string+"\t");

}

Iterator<String>it=list1.iterator();

while(it.hasNext()){

System.out.print(it.next()+"\t");

}

//排序

Collections.sort(list1,new Comparator<String>(){

@Override

public int compare(String o1,String o2){

return o1.compareTo(o2);

}

});

System.out.println();

System.out.println(list1);

}

}

Comparable和Comparator

  • Comparable简介

    Comparable是排序接口。若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类对象的列表或者数组可以通过Collection.sort或Arrays.Sort进行自动排序。

此外,实现此接口的对象可以用有序映射中的键有序集合中的集合,无序指定比较器。

此接口只有一个方法compare,比较此对象与指定对象的顺序,如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

 

  • Comparator简介

Comparator是比较接口,我们如果需要控制某个类的次序,而该类本身不支持排序(既没有实现Comparable接口),name我们就可以建立一个“该类的比较器”来进行排序,这个“比较器”只需要实现Comparator接口即可。也就是说,我们可以通过实现Comparator来新建一个比较器,然后通过这个比较器对类进行排序。

注意:

若一个类要实现Comparator接口:它一定要实现compare(T o1,T o2)函数,但可以不实现equals(Object obj)函数。

Int compare(T o1,T o2)是“比较o1和o2的大小”。返回“负数”,意味着“o1比o2小”;返回“零”,意味着“o1等于o2”;返回“正数”,意味着“o1大于o2”。

  • Comparable和Comparator区别比较

Comparable是排序接口,若一个类实现了Comparable接口,就意味着“该类支持排序”。Comparable是比较器,我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。

    用Comparable简单,只要实现Comparable接口的对象直接就成为一个可以比较的对象,但是需要修改源代码。用Comparator的好处是不需要修改源代码,而是另外实现一个比较器,当某个自定义的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了,并且在Comparator里面用户可以自己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样就可以节省很多重复劳动了。

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值