上一章讲的数组数组有一个特点就是只能放相同类型值进去SEO排名服务就是只能放相同类型值进去那么如果我们既有字符串又有数字甚至还有对象怎么办?java似乎早就想好了给我们提供了集合(Collection).我们今天要讲的是Collection的子类——List.
List又有三个实现类:
ArrayList
Vector
这三个都是list至于什么是子类我们会在对象那章去普及。他们三个相同点有:
都是有序的也就是可以像数组那样通过下标查找元素
都没有长度限制开辟的内存空间动态改变大小
都允许出现重复元素
不同点有:
ArrayList底层是数组结构在查找修改方面的速度还有性能比较好
LinkedList底层链式底层结构在添加删除方面的速度还有性能比较好
Vector与ArrayList相似但是Vector是线程安全的而ArrayList的线程不安全SEO排名服务删除方面的速度还有性能比较好
Vector与ArrayList相似但是Vector是线程安全的而ArrayList的线程不安全这点我们会在线程那章详细讲到。
我们一般最常用的还是ArrayList。
用法我们就拿ArrayList来举例说明。
查询方法
根据下标查询:get(下标)
ArrayList list = new ArrayList();
list.add("1");
System.out.println(list.get(0));
list的下标和数组一样也是从0开始代表了元素在列表里的位置
循环获取值
for循环:
ArrayList list = new ArrayList();
list.add("大妖怪");
list.add("小妖怪");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
for each循环:
ArrayList list = new ArrayList();
list.add("大妖怪");
list.add("小妖怪");
for (Object object : list) {
System.out.println(object);
}
iterator迭代器遍历:(这种方法无需关注底层是数组还是链式)
ArrayList list = new ArrayList();
list.add("大妖怪");
list.add("小妖怪");
Iterator it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
修改方法
根据下标修改:set(下标)
ArrayList list = new ArrayList();
list.add("大妖怪");
System.out.println(list.get(0));
list.set(0, "小妖怪");
System.out.println(list.get(0));
增加方法
追加到list的最后:add(内容)
ArrayList list = new ArrayList();
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
list.add("大妖怪");
System.out.println("==============");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
添加到任意位置(原来位置上的元素后移):add(下标内容)
ArrayList list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
list.add(2, "大妖怪");
System.out.println("==========");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
将另一个列表添加进来:addAll(列表)
ArrayList list = new ArrayList();
ArrayList list1 = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
list1.add("a");
list1.add("b");
list1.add("c");
list1.add("d");
list.addAll(list1);
System.out.println("===========");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
将另一个列表添加到指定位置: addAll(下标列表)
ArrayList list = new ArrayList();
ArrayList list1 = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
list1.add("a");
list1.add("b");
list1.add("c");
list1.add("d");
list.addAll(2,list1);
System.out.println("===========");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
删除方法:“
删除指定元素:remove(内容)此方法对内容是int类型的无效
ArrayList list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
list.remove("2");
System.out.println("===========");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
根据下标删除元素:remove(下标)
ArrayList list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
list.remove(3);
System.out.println("===========");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
从这个列表中删除另一个列表所包含的内容:removeAll(列表)
ArrayList list = new ArrayList();
ArrayList list1 = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
list1.add("1");
list1.add("2");
list.removeAll(list1);
System.out.println("===========");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
其它方法:
获得列表长度(元素的个数从1开始):size()
ArrayList list = new ArrayList();
list.add("大妖怪");
list.add("小妖怪");
System.out.println(list.size());
判断是否为空:isEmpty()
ArrayList list = new ArrayList();
list.add("大妖怪");
list.add("小妖怪");
System.out.println(list.isEmpty());