Collection集合: – 具备数组的功能,可以存储一组数据, 但是不需要程序员维护集合的长度(集合会根据数据存储的个数自动扩容)
// 集合中存储的是对象的引用: 如果引用的对象的内容被修改了,那么集合中的内容也被修改了。
// 优点: 不用维护长度的变化
加粗样式
java.util.List - 接口, 是Collection的子接口, 具有Collection的所有方法, 还有自己独有的方法。
java.util.ArrayList – List接口的实现类。
// 子接口List 继承 父接口 Collection , List中有自己独有的方法。
T get(int index) ; – T代表的是创建对象的时候,设置的泛型。
// 根据索引位置,获取到该位置的数据值。
例子:
List<String> list = new ArrayList<String>();
list.add("ailice");
String rose = list.get(1);
System.out.println("rose:" + rose);
for(int i =0 ; i < list.size() ; i++) { //for循环遍历
System.out.println(list.get(i));// list.remove(list.get(i));
// -- 造成list.size()在不断变化
//建议不要遍历的时候,删除集合的元素,会导致集合的结构变化。
}
新for循环
例子:
for(String s: list) {
System.out.println(s);
}
迭代器遍历
例子:
Iterator<String> it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
T set(int index , T t) -–设置指定索引位置的数据,返回该位置原来的数据值。
//index的范围 [0, size()-1],不在这个范围内,抛出IndexOfBoundsException.
例子:
String oldStr = list.set(0, "贝多芬");
System.out.println(list); // [贝多芬, rose, zara, flower]
**
创建集合的实例
**
Collection – 是接口, 只能创建其实现类的对象。
List是Collection的子接口。
List – 是接口, ArrayList是List的实现类。
例子:
Collection c = new ArrayList();
// 创建两个Cell
Cell cell1 = new Cell(3,4);
Cell cell2 = new Cell(5,6);
//boolean add(Object o);
//给集合添加元素 , 集合中保存的是cell1,cell2的应用地址
c.add(cell1);
c.add(cell2);
System.out.println(c); //[(3,4), (5,6)] -- ArrayList和Cell都重写了toString方法。
// 修改cell1的数据值 set
cell1.setX(100);
cell1.setY(100);
//由于集合中存储的是引用地址, 所以cell1修改了对象的x,y之后, 集合中的对象的内容也被修改。
// 集合中允许出现重复的内容
Cell cell3 = cell1;
c.add(cell3);
System.out.println(c);
集合中是否包含某个元素: 以equals结果为准
//创建集合的实例
//Collection – 是接口, 只能创建其实现类的对象。
//List是Collection的子接口。
//List – 是接口, ArrayList是List的实现类。
例子:
Collection c = new ArrayList();
// 创建两个Cell
Cell cell1 = new Cell(3,4);
Cell cell2 = new Cell(5,6);
// 添加到集合中
c.add(cell1);
c.add(cell2);
Cell cell3 = new Cell(5,6);
Cell cell4 = cell1;
// --集合中是否包含了cell3?
/*
* boolean contains(Object obj)
*/
boolean b = c.contains(cell3); // cell3.equals(cell2)-true.
if(b) {
System.out.println("包含");
}else {
System.out.println("不包含");
}
b = c.contains(cell4); // cell1.equals(cell4) -true
if(b) {
System.out.println("包含");
}else {
System.out.println("不包含");
}
Collection中提供的方法:
//自动封箱int-Integer
//int size()
//size()指集合中元素的个数
//长度指集合中可以放多少个元素
例子:
int size = c.size();
System.out.println("集合中元素的个数:" + size);
//boolean isEmpty() , 集合中没有元素,返回true, 否则返回false.
System.out.println(c.isEmpty()); // false.
//void clear() -- 清空集合中的所有内容。
c.clear();//这里清空后面就没有内容了
System.out.println("c:" + c);
boolean remove(Object obj ) – 删除equals结果相等的元素, 如果有多个结果相等的,只删除第一个。
boolean addAll(Collection c ) – 将一个集合添加到一两个集合中。
booealn removeAll(Collection c) – 批量删除
集合中的元素的遍历:– 集合不能使用传统的for循环遍历。 – Collection中没有提供可以根据索引位置获取元素的方法。
Iterator iterator() — 获取迭代器: 迭代器用于所有的集合。
Iterator – 迭代器
//迭代器使用的过程中,不允许使用集合的方法对集合做修改(add,remove)
//迭代器使用过程中,不破坏集合原本的结构。
//一次hasNext的调用,对应一次next的调用。
boolean hasNext() – 问是否有
Object next() – 获取出来
void remove() – 删除当前遍历的元素
it.remove()-- 迭代器的删除
c.remove(“C”); – 导致遍历不成功,抛出异常
// 迭代器遍历结束了,不能使用next方法,否则抛出异常。