JAVA编程学习之JAVA集合

时间:2022-10-06 00:29:07

一、JAVA集合类

为了保存数量不确定的数据,以及保存具有映射关系的数据(关联数组),java提供了集合类。所有集合类位于java.util包下。

集合类就像容是器,现实生活中容器的功能,无非就是添加对象、删除对象、清空容器、判断容器是否为空等,集合类就为这些功能提供对应的方法。

java集合类是由两个接口Collection 和 Map派生而出

Collection

Map

Set

Queue

List

EnumMap

IdentityHashMap

HashMap

LinkedHashMap

Hashtable

Properties

SortedMap

TreeMap

WeakHashMap

EnumSet

SortedSet

HashSet

TreeSet

LinkedHashSet

Deque

PriorityQueue

ArrayDeque

LinkedList

ArrayList

Vector

Stack

Map实现类用于保存具有映射关系的数据。

Set 无法记住添加元素的顺序,所有元素不能重复且无序

List 像一个长度可变的数组

二、Collection和Iterator接口

Iterator类与Collection、Map不同,主要用于遍历Collection中的元素,其对象也被称为迭代器

1、Collection使用如下:

  • Boolean add(Object o )   添加对象,成功添加返回true
  • Boolean addAll(Collection c)  将集合C中所有元素加入,成功返回true
  • Void clear();   清空容器
  • Boolean contains(Object o )  返回集合里是否包含指定元素
  • Boolean containsAll(Collection c)  返回是否包含集合内所有元素
  • Boolean isEmpty()   返回集合是否为空
  • Iterator iterator();  返回一个Iterator对象,用于遍历集合里的元素
  • Boolean remove(Object o)  删除集合中指定元素,如果有多个o元素时,删除第一个符合条件的元素
  • Boolean removeAll(Collection c)  删除c中包含的所有元素
  • Boolean retainAll(Collection c )  删除集合中不属于集合c的元素
  • Int size()   返回集合元素个数
  • Object[] toArray()  将集合转化为数组,集合元素变为数组元素

Collection实现类都重写了toString()方法,使用System.out.println()输出集合对象时,将输出[ele1,ele2…….]的形式。

2、遍历Collection

遍历过程中不要使用集合的remove对集合进行删除操作,会抛出异常

Iterator迭代器的使用

  • Boolean hasNext()      如果被迭代的集合元素还没有遍历完,返回TRUE
  • Object next();         返回集合中的下一个元素(传值不传对象)
  • Void remove()        从集合中删除上一个用next返回的元素
  • Void forEachRemaining(Consumer action)  可使用Lambda表达式来遍历

程序示范4种迭代方式:

public static void main(String[] args) {
………………………
//获取books集合对应的迭代器
Iterator it = books.iterator(); //1.使用Lambda表达式遍历集合
books.forEach(obj->System.out.println(“迭代集合元素:”+obj)); //2.使用Iterator遍历集合
while(it.hasNext()) { //迭代是否结束
//返回Object类型的数据,需要强制转换
String book = (String)it.next();
System.out.println(book);
if(book.equals("迭代器")) {
//从集合中删除book对应的元素
it.remove();
}
......
}
………. //3.使用Lambda表达式遍历Iterator
it.forEachRemaining(obj->System.out.println(“迭代集合元素:”+obj)); //4.使用foreach循环遍历集合元素
for(Object obj : books){
String book = (String)obj;
……….
}
}

3、Predicate操作集合

  • removeIf(Predicate filter)方法
//批量删除符合条件的元素(过滤集合),删除所有长度小于10 的字符串元素

Book.removeIf(ele -> ((String)ele).length()<10);
  • 使用Predicate可以充分简化集合的运算

例如:Predicate的test方法可以判断该对象是否满足Predicate指定的条件,对于统计集合中符合某个条件的元素有多少,只需要构造一个方法:

public static void main(String[] args) {
//统计包含“Predicate”的元素
System.out.println(calAll(books,ele -> ((String)ele).contains("Predicate")));
//统计包含“test”的元素
System.out.println(calAll(books,ele -> ((String)ele).contains("test")));
//统计字符串大于10的元素
System.out.println(calAll(books,ele -> ((String)ele).length()>10));
}
public static int calAll(Collection books,Predicate p) {
int count = 0;
for(Object obj : books) {
if(p.test(obj)) { //满足Predicate则++
count++;
}
}
return count;
}