Collection 表示一组对象,它是集中、收集的意思。Collection接口的两个子接口是List、Set接口。
List 特性 : 有序 可重复,保证数据的添加顺序和取出顺序一致
Set 特性 : 无序 不可重复,不能保证数据的添加和取出顺序一致
// 这里 ArrayList 间接继承了 Collection(接口并不包含实现) 所以用实现了他方法的ArrayList进行展示.
Collection c1 = new ArrayList(); //这里发生了多态父类引用指向子类对象, 多态会丢失子类特有属性,所以可以证明下面方法都是Collection定义的.
// Collection
c1.add(11); // 此时在ArrayList中 11会自动包装变为Integer类型 传入后因为父类引用指向子类对象发生多态, 内部实际保存时Object类型. 所以可以传入所有继承object类型的类
c1.remove("a");
其余内容和上面一样c1.size()
c1.isEmpty()
c1.toArray()
hasNext()
如果还有下一个元素就返回true, 如果没有就返回falsenext()
返回当前指向的元素返回,并让光标指向下一个元素remove()
: 删除当前指向的元素,当使用迭代器时,想要删除数据,只能使用迭代器的删除.
modCount
变量记录集合中的任何操作的修改如果修改就 + 1 当创建迭代器的时候, 会把这个集合当前的修改次数赋值给迭代器, 每次执行操作的时候就会比较迭代器中modCount
的值, 和集合中的值是否相等, 如果不等就抛出异常.hasNext()
next()
// 创建集合
Collection c1 = new ArrayList();
// 向集合中添加元素
c1.add("a");
c1.add("b");
c1.add("c");
// 创建迭代器
Iterator it = c1.iterator(); // iterator()是创建迭代器并放回的方法 集合中包含
while (it.hasNext()) { //判断是否有下一个元素
Object o = it.next();
System.out.println(o);
if (o.equals("a")) {
// 需要使用迭代器的删除,不过一般不会删除的
t.remove();
}
}
// 迭代器使用完后,光标不会自动复原,此时还指向最后一个元素呢, 想要再次使用,只能重新生成
it = c1.iterator();
for(数据类型 变量 : 集合/数组){ 循环体 }
Collection c1 = new ArrayList();
for(Object o : c1){
// 循环的内容如打印
}
List list = new ArrayList(); //让我们先创建一个ArrayList
list.add(Object)
传入基本数据类型也会因为自动装箱变为对象包装类型从而继承Objectlist.add(2, "d");
第一个是插入的索引为int类型, 第二个为插入的内容为Objectlist.remove("a")
传入要删除的内容list.remove(Integer.valueOf(22))
list.remove(1)
传入要删除的索引下标list.get(1)
传入索引list.set(1, "e");
第一个传入索引,第二个传入要修改内容list.size();
list.contains("a");
list.isEmpty();
list.clear();
list.indexOf("a");
传入对应元素// 使用正常循环获取size使用根据索引获取的get方法进行展示
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// 直接使用增强for循环进行遍历
for (Object object : list) {
System.out.println(object);
}
LinkedList list = new LinkedList(); // 我们先创建一个LinkedList
LinkedList中有一个名为Node
的静态内部类用来创建节点. 其中包含三个成员变量, 一个是保存的值, 一个是下一个节点对象的地址, 一个是上一个节点对象的地址.
Node的构造方法会分别接受这三个值并放入成员之中
modCount
记录操作次数获取方法看似是根据下表进行寻找,但实际上是根据传入整数,进行循环找到对应的节点值返回
为了加快效率, 如果在前一半就从前往后寻找, 如果在后一半就从后往前寻找
a.prev.next = a.next;
a.next.prev = a.prev;