Collection类简介
* java集合框架
* java.util.Collection接口,是所有集合的顶级接口,规定了集合所必须的功能
* <p>
* 集合与数组一样,可以保存一组具有相同类型元素数据结构
* 并且提供了对于元素的维护操作(方法)。
* 集合有多种不同的数据结构可供日后开发选择使用,使得Java程序能够更加高效、安全地处理集合数据。
两种集合
* Collection下面有很多细分的集合类
* 常见的两个子类别(下述两个也是接口):
* java.util.List:List代表的是可重复且有序的集合
* java.util.Set:Set代表的是不可重复的集合
//Collection c = new ArrayList();Collection c = new HashSet();/*boolean add(E e)集合提供了添加元素的方法,如果元素成功存入集合则返回true。*/boolean test = c.add("one");System.out.println(test);c.add("two");c.add("three");c.add("four");c.add("five");c.add("six");System.out.println(c);//对于HashSet而言,本次返回值就是false,没有存入集合test = c.add("one");System.out.println(test);System.out.println(c);int size= c.size();System.out.println("集合元素个数为:"+size);/*boolean isEmpty() empty:空的判断当前集合是否为空集当且仅当size为0时,该方法返回true。*/boolean isEmpty= c.isEmpty();System.out.println("是否为空集:"+isEmpty);/*void clear()清空集合*/c.clear();System.out.println();System.out.println(c);System.out.println("是否为空集"+c.isEmpty());System.out.println("集合的元素个数"+c.size());
集合常见方法
* 集合受元素equals影响的相关操作:
* contains判断包含
* remove删除元素
Point类
public class Point {private int x;private int y;public Point(int x, int y) {this.x = x;this.y = y;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Point point = (Point) o;return x == point.x && y == point.y;}@Overridepublic int hashCode() {return Objects.hash(x, y);}@Overridepublic String toString() {return "(" +x +"," + y +')';}public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}
}
方法实例
Collection c = new ArrayList();c.add(new Point(1, 2));c.add(new Point(3, 4));c.add(new Point(5, 6));c.add(new Point(7, 8));c.add(new Point(9, 10));c.add(new Point(11, 12));/*集合重写了toString,格式为:[元素1.toString(), 元素2.toString(), 元素3.toString(), ...]由此可见,想更直观的体现元素时,元素也需要妥善重写toString方法。*/System.out.println(c);Point p = new Point(1, 2);/*contains:包含boolean contains(Object o)判断当前集合是否包含给定元素,若包含则返回true,否则返回false这里判断包含的逻辑是:给定元素是否与集合现有元素存在equals比较为true的情况,如果有则认为包含该元素。否则为不包含。*/boolean contains = c.contains(p);System.out.println("是否包含:" + contains);/*boolean remove(Object o)删除当前集合中给定元素。删除的逻辑也是删除集合中与参数给定元素equals比较为true的元素。注意:如果集合存在重复元素,那么在删除重复元素时,remove方法仅会删除一次。*/c.remove(p);System.out.println(c);c.add(new Point(1,2));c.add(new Point(1,2));System.out.println(c);c.remove(p);System.out.println(c);
* 集合可以保存一组相同类型的元素。
* 但是集合只能存放【引用类型】元素,并且存放的是该引用类型对象的地址
Collection c = new ArrayList();//c.add(123)等于c.add(Integer.valueOf(123))自动装箱Point p = new Point(1, 2);c.add(p);System.out.println("p:"+p);//p:(1,2)System.out.println("c:"+c);//c:[(1,2)]p.setX(2);//将p对象的属性x的值改为2System.out.println("p:"+p);//p:(2,2)System.out.println("c:"+c);//c:[(2 ,2)]
* 集合之间的操作
//Collection c1 = new ArrayList();Collection c1 = new HashSet();//alt+enter(回车),辅助提示,可用于自动导包等操作c1.add("java");c1.add("c");c1.add("c++");System.out.println(c1);Collection c2 = new ArrayList();c2.add("android");c2.add("ios");c2.add("java");//c1存在的元素System.out.println(c2);/*boolean addAll(Collection c)将给定集合c中的所有元素添加到当前集合中。添加后当前集合元素发生了变化则返回true。*/c1.addAll(c2);//将c2的所有元素添加到c1中,取并集System.out.println(c1);Collection c3 = new ArrayList();c3.add("java");c3.add("android");//c3.add("php");System.out.println("c3:" + c3);/*boolean containsAll(Collection c)判断当前集合是否包含给定集合中的所有元素。全部包含则返回true,否则返回false*/boolean containsAll = c1.containsAll(c3);System.out.println("c1是否包含c3的所有元素:" + containsAll);/*取交集操作boolean retainAll(Collection c)仅保留当前集合中与给定集合c的共有元素。*/
// c1.retainAll(c3);
// System.out.println(c1);/*差集操作(删除交集部分)removeAll可以删除当前集合中与给定集合的公有元素*/c1.removeAll(c3);System.out.println(c1);