数组和集合的区别
List 子接口:ArrayList LinkedList Vector
Set子接口:HashSet LinkedHashSet TreeSet
添加功能
eg: Collection collection = new ArrayList();//父接收子
collection.add("aaa");
collection.add("123");
System.out.println(collection);————输出:[aaa, 123]
eg: Collection c = new ArrayList();
c.add("abc");
c.add("def");
Collection c1 = new ArrayList();
c1.add("123"); //自动装箱
c1.add("456");
c1.add(Integer.valueOf(789));
c.addAll(c1); // 把c1集合放进c中
System.out.println(c);————输出:[abc, def, 123, 456, 789]
eg: ......
c.remove(789);
System.out.println(c);
eg: c.clear();
System.out.println(c);————输出:[]
有交集可移除返回 true 没有交集不可移除 则删除失败 返回 false
eg: Collection c = new ArrayList();
c.add("abc");
c.add("def");
c.add("ghi");
c.add("123");
c.add("456");
Collection c1 = new ArrayList();
c1.add("123"); //自动装箱
c1.add("456");
c1.add(Integer.valueOf(789));
boolean b = c.removeAll(c1);
System.out.println(b);——————输出:true
eg: ......
boolean b1 = c.contains("abc");
System.out.println(b1);————输出:true
eg: ......
boolean b2 = c.containsAll(c1);
System.out.println(b2);————输出:false
eg: ......
c.clear();
boolean b = c.isEmpty();
System.out.println(b);——————输出:true
eg: Collection c = new ArrayList();
c.add("abc");
c.add("def");
c.add("ghi");
c.add("123");
c.add("456");
c.add("我爱学习");
int size = c.size();
System.out.println(size);————输出:6
eg: Collection c = new ArrayList();
c.add("abc");
c.add("def");
c.add("ghi");
c.add("123");
c.add("456");
Collection c1 = new ArrayList();
c1.add("123");
c1.add("456");
c1.add(Integer.valueOf(789));
boolean b = c.retainAll(c1);
System.out.println(b);———-—返回true c发生过变化
System.out.println(c);——-——c变成c与c1的交集
反向遍历前必须先正向遍历,使指针移到最后一个元素上
eg: Collection c = new ArrayList();
c.add(2000);
c.add(2002);
c.add(2004);
c.add(2006);
c.add(2008);
c.add(2010);
Iterator it = c.iterator();————c集合的迭代器
while(it.hasNext()){
Object obj = it.next();
System.out.println(obj);————元素遍历
}
System.out.println("================");
while(li.hasPrevious()){ ——————元素反向遍历
Object p = li.previous();
System.out.println(p);
}
eg: Collection c = new ArrayList();
c.add(10);
c.add(20);
c.add(30);
c.add(40);
c.add(50);
Object[] obj = c.toArray();//父类接收子类
for (int i = 0; i < obj.length; i++) { //遍历
Integer in = (Integer) obj[i];//向下转型
System.out.println(in.intValue()); // 以int类型返回改integer的值
}
collection——父父接口
List———父接口
eg: List l = new ArrayList();
l.add(100);
l.add(200);
l.add(300);
l.add(400);
l.add(500);
l.add(0,10);
System.out.println(l);————输出:10 100 200 300 400 500
eg: List l = new ArrayList();
l.add(100);
l.add(200);
l.add(300);
l.add(400);
l.add(500);
l.add(0,10);
l.add(0,2);
Object o = l.remove(2);————删除索引2
System.out.println(o);———输出:100
boolean b = l.remove(Integer.valueOf(2));————删除元素2
System.out.println(b);————输出:true
eg: ......
Object o = l.get(l.size() - 1);
System.out.println(o);——————输出:500
eg: ......
Object o1 = l.set(0, 50);
System.out.println(o1);————输出:10
eg: List l1 = l.subList(2, 5);
System.out.println(l1);————输出:[200, 300, 400]
遍历集合的四种方法
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class demo4 {
public static void main(String[] args) {
———————遍历集合
List l = new ArrayList();
l.add(100);
l.add(200);
l.add(300);
l.add(400);
l.add(500);
————————————方法一:for循环
for (int i = 0; i < l.size(); i++) {
Object o = l.get(i);
System.out.println(o);
}
System.out.println("================");
————————————方法二:toArray方法
Object[] obj = l.toArray();
for (int i = 0; i < obj.length; i++) {
Integer in = (Integer) obj[i];
System.out.println(in);
}
System.out.println("================");
————————————方法三:Collection的iterator方法
Iterator iterator = l.iterator();
while (iterator.hasNext()){
Object o = iterator.next();
System.out.println(o);
}
System.out.println("================");
————————————方法四:List独有的方法
ListIterator listIterator = l.listIterator();
while (listIterator.hasNext()){
Object next = listIterator.next();
System.out.println(next);
}
System.out.println("================");
}
}
————使用迭代器对集合的元素进行迭代 在迭代途中增删集合中的元素会出现ConcurrentModificationException并发修改异常
————因为通过集合获取到这个迭代器之后 迭代器预先知道集合中的元素个数 会按照既定的元素个数进行迭代,在迭代途中增删元素,会打乱迭代器的迭代顺序,所以就会抛出并发修改异常
eg: ArrayList l = new ArrayList();
l.add("abc");
l.add("def");
l.add("xyz");
l.add("java");
//使用迭代器自带迭代增删元素的方法
ListIterator li = l.listIterator();
while(li.hasNext()){
Object next = li.next();
String ele = (String) next;
if(ele.equals("java")){
li.add("World");
}
}
System.out.println(l);
eg: int index1 = l.lastIndexOf("xyz");
System.out.println(index1);————输出:6
eg: ArrayList l = new ArrayList();
l.add("abc");
l.add("def");
l.add("xyz");
l.add("java");
l.add("123");
l.add("456");
l.add("xyz");
int index = l.indexOf("xyz");
System.out.println(index);————输出:2
Consumer ——接口
eg: //遍历集合中的元素
l.forEach(new Consumer() {
@Override
public void accept(Object o) {
System.out.println(o);
}
});