这里总结了一下List集合常用的一些方法,但是最重要的大家一定要注意最后数组那块的坑。
1、增
- add();
- add(int index, T t);
- addAll(Collection);
- addAll(int index, Collection);
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("hello");
list.add(0, "world");
System.out.println(list);
Collection<String> collection = new ArrayList<>();
collection.add("LXH");
collection.add("www.mldn.cn");
list.addAll(collection);
list.addAll(0, collection);
System.out.println(list);
}
执行结果:
[world, hello]
[LXH, www.mldn.cn, world, hello, LXH, www.mldn.cn]
2、删
- remove(int index); 根据角标删除元素
- remove(T t); 根据元素内容删除元素
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("hello");
list.add(0, "world");
list.add("MLDN");
list.add("www.mldn.cn");
//根据角标删除元素,并返回当前删除的元素值
System.out.println(list.remove(0));
//根据元素内容删除元素,并返回是否删除成功
System.out.println(list.remove("hello"));
System.out.println(list);
}
执行结果:
world
true
[MLDN, www.mldn.cn]
3、改
- set(int index, T t); 将第index上的元素替换成t
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("hello");
list.add(0, "world");
list.add("MLDN");
list.add("www.mldn.cn");
//根据角标删除元素,并返回当前替换的元素值
System.out.println(list.set(0, "hello"));
System.out.println(list);
}
执行结果:
world
[hello, hello, MLDN, www.mldn.cn]
4、查
-
get(int index); 根据角标找到对应的元素
-
indexOf(T t); 根据元素找到对应的角标
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("hello");
list.add(0, "world");
list.add("MLDN");
list.add("www.mldn.cn");
//根据角标找到对应的元素,并返回当前的元素值
System.out.println(list.get(0));
//根据元素找到对应的角标,并返回
System.out.println(list.indexOf("hello"));
System.out.println(list);
}
执行结果:
world
1
[world, hello, MLDN, www.mldn.cn]
5、遍历
1、for循环遍历
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("hello");
list.add(0, "world");
list.add("MLDN");
list.add("www.mldn.cn");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
2、for-each遍历
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("hello");
list.add(0, "world");
list.add("MLDN");
list.add("www.mldn.cn");
for (String s : list) {
System.out.println(s);
}
}
3、迭代器遍历
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("hello");
list.add(0, "world");
list.add("MLDN");
list.add("www.mldn.cn");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext())
System.out.println(iterator.next());
}
}
执行结果:
world
hello
MLDN
www.mldn.cn
6、将集合转化为对象数组
-
toArray(); 将集合转化成Object数组并返回(注意这里有个坑)
-
list.toArray(new String[list.size()]); 将集合元素放入**new
String[list.size()**中然后返回
①用toArray()方法
public static void main(String[] args) {
String[] s = null;
List<String> list = new ArrayList<>();
list.add("hello");
list.add(0, "world");
list.add("MLDN");
list.add("www.mldn.cn");
//注意这的坑
s = (String[]) list.toArray();
System.out.println(Arrays.toString(s));
}
执行结果:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
at com.lanou.test.ArrayList.ArrayListTest.main(ArrayListTest.java:18)
原因是Object[] 数组不能强转成String[]数组;除非这个数组初始化的时候就指向了String[]数组。
一定要注意这里的坑。返回的是个Object数组
解决方法:
先转换成Object数组,然后用toString()再转换,但这种方法不是万能的,你们可以自己好好想一下为什么?其实就是当你存入自己写的类的对象的时候,如果你没有重写toString()那么你的值应该就取不到了。
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("hello");
list.add(0, "world");
list.add("MLDN");
list.add("www.mldn.cn");
String[] s = new String[list.size()];
Object[] o = list.toArray();
for (int i = 0; i < o.length; i++) {
s[i] = o[i].toString();
}
System.out.println(Arrays.toString(s));
}
②用toArray(new String[list.size()])
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("hello");
list.add(0, "world");
list.add("MLDN");
list.add("www.mldn.cn");
String[] s = null;
s = list.toArray(new String[list.size()]);
System.out.println(Arrays.toString(s));
}
执行结果:
[world, hello, MLDN, www.mldn.cn]