zoukankan      html  css  js  c++  java
  • 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;  
        }  
    } 
  • 相关阅读:
    使用MSXML2::IXMLDOMDocument2Ptr每次都要CreateInstance和load(xmlfile)吗?
    .Net程序安装打包的一些经验贡献
    感慨SQL2005中的数据挖掘算法
    COM客户端没法激活托管代码生成的COM Server的原因
    预感~=命中注定
    创业经理10大必备素质
    全局缓存管理工具
    XML DOM的结构概念图解哪里是Element,哪里是Attribute,哪里是Text
    用GetVolumeInformation得到的不是硬盘的序列号,不要再抄这样的错误好吗?
    站在生活的背后
  • 原文地址:https://www.cnblogs.com/hwaggLee/p/4510642.html
Copyright © 2011-2022 走看看