2 集合框架
2.1. Collection
java提供了一种可以存数一组数据的数据结构,其提供了丰富的方法,在实际开发中往往比数组使用的广泛。这种数据结构成为集合:Collection。
Collection是一个接口,其定义了集合的相关功能方法。
2.1.1. List和Set
Collection派生出了两个子接口,一个是List另一个则是Set。
List:称为可重复集,顾名思义,该集合中是允许存放重复元素的,那么何为重复元素?重复元素指的并非是同一个元素,而是指equals方法比较为true的元素。
Set:称为不可重复集,所以,该集合中是不能将相同的元素存入集合两次,同List,这里相同指的也是两个元素的equals比较结果为true。
2.1.2. 集合持有对象的引用
集合中存储的都是引用类型的元素,那么引用类型变量实际上存储的是对象的“地址”,所以实际上集合只存储了元素对象在堆中的地址。而并不是将对象本身存入了集合中。
2.1.3. add()方法
Collection定义了一个add方法用于向集合中添加新元素。 该方法定义为:
- boolean add(E e)
该方法会将给定的元素添加进集合,若添加成功则返回true,否则返回false
例如:
- Collection<String> c = new ArrayList<String>();
- System.out.println(c); // []
- c.add("a");
- c.add("b");
- c.add("c");
- System.out.println(c); // [a, b, c]
这里Collection后面的<String>是泛型,我们后面会讲解,这里不写也没有关系。
2.1.4. contains方法
- boolean contains(Object o)
该方法会用于判断给定的元素是否被包含在集合中。若包含则返回true,否则返回false。
这里需要注意的是,集合在判断元素是否被包含在集合中是使用元素的equals的比较结果。
(o==null ? e==null : o.equals(e)) 其中e是集合中的元素。
例如:
- Collection<Cell> cells = new ArrayList<Cell>();
- cells.add(new Cell(1, 2));
- cells.add(new Cell(1, 3));
- cells.add(new Cell(2, 2));
- cells.add(new Cell(2, 3));
- Cell cell = new Cell(1, 3);
- // List集合contains方法和对象的equals方法相关
- boolean flag = cells.contains(cell);
- // 如果Cell不重写equals方法将为false
- System.out.println(flag); // true
2.1.5. size,clear,isEmpty方法
size方法用于获取当前集合中的元素总数。该方法定义为:int size()
clear方法用于清空集合。该方法定义为:void clear()
isEmpty方法用于判断当前集合中是否不 包含元素。该方法定义为:boolean isEmpty()
例如:
- Collection<String> c = new HashSet<String>();
- System.out.println(c.isEmpty()); // true
- c.add("java");
- c.add("cpp");
- c.add("php");
- c.add("c#");
- c.add("objective-c");
- // isEmpty:false, size: 5
- System.out.println("isEmpty:" + c.isEmpty() + ",size: " + c.size());
- c.clear();
- // isEmpty:true, size: 0
- System.out.println("isEmpty:" + c.isEmpty() + ", size: " + c.size());