Collection 接口及其常用方法

Posted echo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Collection 接口及其常用方法相关的知识,希望对你有一定的参考价值。

Collection 接口没有直接实现类。Collection 实现类(通常通过其中一个子接口间接实现 Collection )可以存放多个 Object 类型的元素。有些 Collection 接口的实现类可以存放重复的元素,有些则不可以。有些 Collection 接口的实现类是有序的,有些是无序的。

Collection 接口及其常用方法

Collection 接口的特点

Collection接口没有直接实现类,提供了更具体的子接口(如SetList)的实现。Collection实现类(通常通过其中一个子接口间接实现Collection)可以存放多个 Object 类型的元素。有些Collection接口的实现类可以存放重复的元素(List),有些则不可以(Set)。有些Collection接口的实现类是有序的(List),有些是无序的(Set)。

所有通用的Collection实现类都会提供两个"标准"构造方法:一个无参构造方法,来创建一个空的集合;以及一个带有单个Collection类型参数的构造方法,创建一个与参数集合具有相同元素的新集合。实际上,后一种构造方法可以复制任何集合,生成一个与参数集合元素相同的所需类型的集合。

public class CollectionConstructors() 
  public static void main(String[] args) 
    ArrayList list = new ArrayList();
    System.out.println("list = " + list); // list = []
	
	list.add(1);
	list.add(2);
	list.add(3);
	System.out.println("list = " + list); // list = [1, 2, 3]

	Vector<Object> vector = new Vector<>(list);
	System.out.println("vector = " + vector);  // vector = [1, 2, 3]
  

Collection 接口常用方法

下面的代码以其间接实现类ArrayList演示Collection接口的常用方法。

public class CollectionMethod() 
  public static void main(String[] args) 
    Collection collection = new ArrayList<>();
    
    // boolean add(E e)
    // 给集合中添加指定的元素,添加成功则返回 true。如果此集合不允许重复元素并且已经包含了指定的元素,
    // 则返回 false。支持此操作的实现类可能会对添加到该集合中的元素进行限制。如果一个集合拒绝添加某个
    // 特定元素的原因不是因为集合已经包含该元素,会抛出一个异常(而不是返回 false)。
    collection.add("hello");
    collection.add(10);
    collection.add(true);
    System.out.println("collection = " + collection); // collection = [hello, 10, true]
    
    // boolean remove(Object o)
    // 从集合中移除指定元素的一个实例。如果集合包含多个满足 (o==null ? e==null : o.equals(e))条件的元素 e,
    // 则移除第一个元素 e。移除完成后返回 true。
    collection.remove("hello");
	System.out.println("collection = " + collection); // collection = [10, true]
    
    // boolean contains(Object o)
    // 如果此集合包含指定元素,则返回 true。更准确地说,当且仅当此集合包含至少
    // 一个满足(o==null ? e==null : o.equals(e))条件的元素 e 时,返回 true。
    System.out.println(collection.contains(10));// true
    
    // int size()
    // 返回此集合中的元素数量
    System.out.println(collection.size());// 2
    
    // boolean isEmpty()
    // 判断集合是否为空
    System.out.println(collection.isEmpty());// false
    
    // void clear()
    // 清空集合中的元素
    collection.clear();
    System.out.println("collection = " + collection); // collection = []
    
    // boolean addAll(Collection<? extends E> c)
    // 将指定集合中的所有元素添加到此集合中
    Collection collection1 = new ArrayList();
    collection1.add("Mary");
    collection1.add("Luck");
    collection.addAll(collection1);
    System.out.println("collection = " + collection); // collection = [Mary, Luck]
   
    // boolean containsAll(Collection<?> c)
    // 判断此集合是否包含指定集合中的所有元素
    System.out.println(collection.containsAll(collection1));// true

    // boolean removeAll(Collection<?> c)
    // 从此集合中移除与指定集合中相同的所有元素。在此调用返回后,此集合将不包含与指定集合共有的任何元素。
    collection.add("King");
    collection.removeAll(collection1);
    System.out.println("collection = " + collection); // collection = [King]
  

Collection 接口遍历元素方式

使用 Iterator(迭代器)

Iterator接口是集合的迭代器,主要用于遍历Collection集合中的元素。所有实现了Collection接口的实现类,都有一个iterator()方法,用以返回一个实现了Iterator接口的对象,即可以返回一个迭代器。

Iterator接口的方法:

// 判断是否还有下一个元素
boolean hasNext()
  
// 返回集合中的下一个元素
E next()

// 从底层集合中移除此迭代器返回的最后一个元素。每次调用 next() 只能调用此方法一次。
// 如果在调用此方法之前尚未调用过 next() 方法,或者在最后一次调用 next() 方法之后
// 已经调用了过一次 remove() 方法,则抛出 IllegalStateException 异常。
default void remove() 

// 对剩余的每个元素执行给定的操作,直到所有元素被处理完或操作抛出异常为止。
default void forEachRemaining(Consumer<? super E> action)

迭代器的使用示例代码:

public class CollectionIterateor() 
  public static void main(String[] args) 
    Collection col = new ArrayList();
    col.add("红楼梦");
    col.add("西游记");
    col.add("三国演义");
    col.add("水浒传");

    // 遍历 col 集合
    // 先获得 col 对应的迭代器
    Iterator iterator = col.iterator();
    // 使用 while 循环遍历
    while (iterator.hasNext()) // 判断是否还有元素
      Object obj = iterator.next(); // 返回下一个元素,类型是 Object
      System.out.println("obj = " + obj);
    
    
    // 当退出 while 循环后,iterator 迭代器指向最后一个元素
    // 此时再调用 next() 会抛出 NoSuchElementException 异常
    // iterator.next();
    
    // 如果需要再次遍历,需要重制迭代器。
    System.out.println("===第二次遍历===");
    iterator = col.iterator();
    while (iterator.hasNext()) 
      Object obj = iterator.next();
      System.out.println("obj = " + obj);
    
  

当迭代器中不存在下一个元素时,直接调用 iterator.next() 方法会抛出 NoSuchElementException 异常,所以调用 iterator.next() 方法之前需要调用 iterator.hasNext() 方法。

增强 for 循环

增强 for 循环是简化版的 iterator,本质一样,只能用来遍历集合或数组。基本语法如下:

for(元素类型 元素名 : 集合名或数组名)
	访问元素;

public class EnhancedFor() 
  public static void main(String[] args) 
    Collection collection = new ArrayList();

    collection.add("mary");
    collection.add(true);
    collection.add(10);

    for (Object o : collection) 
      System.out.println("o = " + o);
    
  

util包的常用类及其方法(下)

一。Collection及其子接口List,Set

Collection是List和Set的父接口。Java语言不仅可以用类说明引用类型也可以用接口说明引用类型。该类型引用所指向的对象必须实施了该接口。

1.1List接口

List接口引用存放的是有序的元素,元素可以重复。

import java.util.*;

public class Test{

public static void main(String[] agrs){

//容器aa的引用为List类型,实施为ArrayList类,即引用和实施相分离。<>定义容器中元素的类型,类型必须为类,如存储的元素为整数,必须

List<String> aa=new ArrayList<String>();

//增加新元素

aa.add("苹果");

aa.add("橘子");

aa.add("香蕉");

aa.add("桃子");

aa.add("苹果");

//aa.get(int index)根据索引获得元素

System.out.println(aa.get(2));

//aa.remove(int index)根据索引删除元素

aa.remove(2);

System.out.println(aa.size());

//删除全部元素

aa.clear();

}

1.2Set接口

与List接口不一样,Set接口的元素没有顺序,元素也不可重复。

import java.util.*;

public class Test{

public static void main(String[] agrs){

Set<Integer> aa=new HashSet<Integer>();

aa.add(new Integer(2));

aa.add(new Integer(3));

aa.add(new Integer(4));

aa.add(new Integer(5));

aa.remove(new Integer(5));

System.out.println(aa.size());

}

}

1.3iterator方法

Collection接口有iterator()方法,通过iterator()方法生成一个循环器,通过.next()方法,可以返回下一个元素,直到穷尽。

import java.util.*;

public class Test{

public static void main(String[] agrs){

Set<Integer> aa=new HashSet<Integer>();

aa.add(new Integer(2));

aa.add(new Integer(3));

aa.add(new Integer(4));

aa.add(new Integer(5));

//生成循环器

Iterator i=aa.iterator()

//如果循环器有下一个元素,将其打印出来

while(i.hasNext()){

System.out.println(i.next());

}

}

}

二.Map接口

Map接口存储的元素为键值对。通过键可以得到值。

import java.util.*;

public class Test{

public static void main(String[] agrs){

Map<String ,Integer>  map=new HashMap<String ,Integer>();

map.put("niuhaitao",1);

map.put("maxiaohui",2);

map.put("niuzitong",3);

System.out.println(map.get("niuzitong");

}

}

Map中,put()方法添加元素,get()方法获得指定键的值。

keySet()方法将所有的键转化为Set

values()方法将所有的值转化为List

通过这两种方法将Map转化为Collection类。

三。Vector类

Vector类与ArrayList类、LinkedList类似,不同点在于Vector类时线程同步的。如果需要线程之间互不干扰,用Vector类是最好的。

3.1Vector类的构造器

Vector():创建一个空的Vector类对象,初始容量为10,容量增量为0

Vector(Collection c):根据Collection c创建一个Vector类对象

Vector(int initialCapacity):创建一个Vector类对象,初始容量为initialCapacity,增量为0

Vector(int initialCapacity,int capacityIcrement):创建一个Vector类对象,初始容量为initialCapacity,容量增量为capacityIncrement

3.2常用方法

int size():返回元素的数量,需要与capacity()方法区分开,后者返回的是容量,即最多可容纳的数量

boolean isEmpty():判断是否为空

void clear():删除所有的元素

boolean add(Object element):增加元素

 Object remove(int index);删除指定索引的元素

Object get(int index):返回指定索引的元素

Object set(int index,Object elemen):指定索引位置设置特定元素

int indexOf(Object element):返回指定元素的索引

addElement():增加元素到Vector对象的末尾处

insertElementAt(int index):在指定索引位置插入元素

setElementAt(Object element,int index):指定索引位置设定特定对象

elementAt(int index):获得指定索引位置的元素

firstElement():获得第一个元素

lastElement():获得最后一个元素

removeAllElement():删除所有元素,同clear()方法

copyInto(Object[] array):将所有元素复制到一个数组

setSize(int newSize):根据newSize值设定新容量

 

以上是关于Collection 接口及其常用方法的主要内容,如果未能解决你的问题,请参考以下文章

java基础35 双例集合Map及其常用方法

Collection接口和常用方法

Collection接口的常用方法

集合:Collection接口(常用方法遍历)

JAVA集合01_Collection接口概述常用方法集合和数组互转3种遍历方式

Collection接口的常用方法