Java-ArrayList
package 集合类.list类; /** * System.Collections.ArrayList类是一个特殊的数组。通过添加和删除元素,就可以动态改变数组的长度。 一.优点 1。支持自动改变大小的功能 2。可以灵活的插入元素 3。可以灵活的删除元素 * @author jjj * 注意,里面的元素是可以重复的,如果元素是new出来的一些对象的话,实际上元素只是对象的引用 */ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.List; public class ArrayList类 { /** * 老紫竹JAVA提高教程(7)-认识List列表之ArrayList<br> * * @author 老紫竹 JAVA世纪网(java2000.net) * */ public static void main(String[] args) { testNormal(); testSpecial(); // 一个最常见的错误 testForProblem(); } public static void testNormal() { // ------------------------------------------------------- // 声明一个列表 // 允许放入任何数据 // ------------------------------------------------------- ArrayList list = new ArrayList(); // 放入整数 // 当然你用 new Integer(1)也可以 list.add(1); // 放入字符串 list.add("abc"); // 放入浮点数 list.add(new Float(1.11)); // add会将数据保存到列表的尾部 showList(list); // 1, abc, 1.11] // 下面我们在列表的头部增加数据 list.add(0, 2); list.add(0, "bcd"); list.add(0, new Double(2.34)); // 列表可以指定插入的位置 // 0 是头部第一个位置,所以数据都逐个放到最前面了 showList(list); // [2.34, bcd, 2, 1, abc, 1.11] // 下面我们插入到我们希望的任何位置 // 当然不能越界,(0 到 list.size()-1)范围内才可以 list.add(1, 3); list.add(4, "xyz"); // 数据被放到了正确的位置 showList(list); // [2.34, 3, bcd, 2, xyz, 1, abc, 1.11] // ------------------------------------------------------- // 我们有了数据,我们来测试读取数据 // ------------------------------------------------------- // 我们可以通过指定索引的位置,来拿到我们希望的数据 System.out.println(list.get(0)); // 2.34 System.out.println(list.get(4)); // xyz // ------------------------------------------------------- // 测试是否存在某个数据 // ------------------------------------------------------- System.out.println(list.contains("xyz")); // true // 测试是否包含一组数据 Collection c = new ArrayList(); c.add(1); c.add(2); System.out.println(list.containsAll(c)); // true c.add(3); c.add(4); // containsAll_1234=false System.out.println(list.containsAll(c)); // false // ------------------------------------------------------- // 查找某个数据所在的索引位置 // 如果不存在,返回-1 // ------------------------------------------------------- System.out.println(list.indexOf(3)); // 1 System.out.println(list.indexOf("xyz")); // 4 System.out.println(list.indexOf("abcd")); // -1 // ------------------------------------------------------- // 测试删除数据 // 请注意, // 如果你使用整数(int)数字,则默认调用的是remove(int index); // 如果你用 long,则会调用 remove(Object obj); // 所以如果你要删除整数,请使用 remove(new Integer(int)); // ------------------------------------------------------- // 删除索引为1的数据 list.remove(1); // 索引为1的数据被干掉了 showList(list); // [2.34, bcd, 2, xyz, 1, abc, 1.11] // 删除数字1 和字符串 abc list.remove(new Integer(1)); list.remove("xyz"); showList(list); // [2.34, bcd, 2, abc, 1.11] // ------------------------------------------------------- // 迭代器的使用 // ------------------------------------------------------- Iterator it = list.iterator(); while (it.hasNext()) { System.out.print(it.next() + " "); // 2.34 bcd 2 abc 1.11 } System.out.println(); // ------------------------------------------------------- // 转化为数组 // ------------------------------------------------------- Object[] objs = list.toArray(); for (Object obj : objs) { System.out.print(obj + " "); // 2.34 bcd 2 abc 1.11 } System.out.println(); } public static void testSpecial() { // ------------------------------------------------------- // 测试重复和null // ------------------------------------------------------- // List<Integer> list = new ArrayList<Integer>(); list.add(123); list.add(456); list.add(123); list.add(456); // 数据允许重复 showList(list); // [123, 456, 123, 456] list.add(null); list.add(789); list.add(null); list.add(999); // 允许放入多个null showList(list); // [123, 456, 123, 456, null, 789, null, 999] // ------------------------------------------------------- // 测试一下查找最后一次出现的位置 // ------------------------------------------------------- System.out.println(list.indexOf(123)); // 0 System.out.println(list.lastIndexOf(123)); // 2 // ------------------------------------------------------- // 转化为数组 // 记得要转化为Inerger. // ------------------------------------------------------- Integer[] nums = (Integer[]) list.toArray(new Integer[0]); // 注意数据里面有null,所以循环变量不要用int 要用Integer for (Integer num : nums) { System.out.print(num + " "); // 123 456 123 456 null 789 null 999 } System.out.println(); } public static void testForProblem() { // 一些朋友在向循环里向列表增加对象的时候 // 经常忘记初始化,造成最终加入的都是同一个对象 List<MyObject> list = new ArrayList<MyObject>(); MyObject obj = new MyObject(); for (int i = 1; i <= 5; i++) { obj.setName("Name" + i); list.add(obj); } // 里面的数据都是最后一个 showList(list); // [Name5, Name5, Name5, Name5, Name5] // 正确的做法 List<MyObject> list2 = new ArrayList<MyObject>(); MyObject obj2 = null; for (int i = 1; i <= 5; i++) { obj2 = new MyObject(); obj2.setName("Name" + i); list2.add(obj2); } // 里面的数据都是最后一个 showList(list2); // [Name1, Name2, Name3, Name4, Name5] } /** * 显示List里面的数据。 * * @param list */ private static void showList(List list) { System.out.println(Arrays.toString(list.toArray())); } } class MyObject { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } /** * 重写toString方法,输出name */ public String toString() { return name; } }
知识只有共享才能传播,才能推崇出新的知识,才能学到更多,这里写的每一篇文字/博客,基本都是从网上查询了一下资料然后记录下来,也有些是原滋原味搬了过来,也有时加了一些自己的想法