List常用方法总结

package collections.testcollection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import collections.collection.Course;

/**
 * 集合框架分两大类:List和Map,此类是测试:List(主要实现类是ArraryList)
 * 
 * 当前类测试【List】的方法有:
 * 
 * 一、测试添加方法、数组转列表方法,获取下标方法
 * -1.add(E e) :将指定的元素追加到此列表的末尾(可选操作)。 
 * -2.list.indexOf(obj):获取当前元素的下标:返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。 
 * -3.add(int index, E element) :将指定的元素插入此列表中的指定位置(可选操作)。
 * -4.Arrays.asList(obj):将参数obj(数组),转换为列表
 * -5.addAll(Collection<? extends E> c) :按指定集合的迭代器(可选操作)返回的顺序将指定集合中的所有元素附加到此列表的末尾。 
 * -6.addAll(int index, Collection<? extends E> c) :将指定集合中的所有元素插入到此列表中的指定位置(可选操作)。  
 *  
 * 二、删除
 * -7.remove(int index) :删除该列表中指定位置的元素。
 *       removerAll  :从此列表中删除包含在指定集合中的所有元素
 *       retainAll(Collection<?> c) 仅保留此列表中包含在指定集合中的元素
 * -8.boolean remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)(可选操作)。  
 * -9.boolean removeAll(Collection<?> c) :从此列表中删除包含在指定集合中的所有元素(可选操作)。  
 * -10.clear():从此列表中删除所有元素(可选操作)。  
 * 
 * 三、查询--遍历集合
 * -11.for循环
 * -12.foreach循环
 * -13.iterator() 以正确的顺序返回该列表中的元素的迭代器。 
 *   此外还有get(index)按下标查询等简单方法
 * 
 * 
 * 四、各种判断方法是否存在?有个问题,重写equals方法?
 * -14.boolean contains(Object o):如果此集合包含指定的元素,则返回true 。
 * -15.boolean containsAll(Collection<?> c):如果此集合包含指定 集合中的所有元素,则返回true。
 * 
 * 五、修改
 * -16.set(int index, E element) 用指定的元素(可选操作)替换此列表中指定位置的元素。 
 * 
 * 六、排序
 * sort
 * 其他的方法
 * -17.replaceAll(UnaryOperator<E> operator) :将该列表的每个元素替换为将该运算符(operator)应用于该元素的结果。 
 * 
 */
public class TestList {
    
    // 类属性--待选课程集合,此属性的类型是Coure(本身即是一个类)
    public List<Course> coursesToSelect ;//使用泛型
    
    // 利用构造器来初始化couresToSelect,ArrayList是List的实现类,因为List是接口,接口不能被实例化
    public TestList(){
        this.coursesToSelect = new ArrayList<Course>();//注意泛型
    }
    
    /**
     * 基础的数据
     */
    public void newData(){
        Course c1 = new Course("1", "课程一");
        Course c2 = new Course("2", "课程二");
        Course c3 = new Course("3", "课程三");
        Course c4 = new Course("4", "课程四");
        Course c5 = new Course("5", "课程五");
        Course c6 = new Course("6", "课程六");
        coursesToSelect.add(c1);
        coursesToSelect.add(c2);
        coursesToSelect.add(c3);
        coursesToSelect.add(c4);
        coursesToSelect.add(c5);
    }
    
    /**
     * 方便查看集合
     */
    public void testForeach(){
        for (Course course : coursesToSelect) {
            System.out.println(course.getName());
        }
    }
    /**
     * 一、测试添加方法、数组转列表方法,获取下标方法
     */
    public void testAdd(){
        // 通过实例化课程类(Course),新建课程对象,以便放入集合coursesToSelect中
        Course c1 = new Course("1", "课程一");
        Course c2 = new Course("2", "课程二");
        
        //1.add(E e) :将指定的元素追加到此列表的末尾(可选操作)。 
        coursesToSelect.add(c1);
        System.out.print("添加了课程:");
        System.out.print(coursesToSelect.get(0).getId()+":"+coursesToSelect.get(0).getName());
        // 结果--添加了课程:1:课程一
        System.out.println();
        
        //2.获取当前元素的下标:list.indexOf(obj)
        System.out.println("此时课程一的下标为:"+coursesToSelect.indexOf(c1));
        // 结果--此时课程一的下标为:0
        System.out.println("现在查询一个不存在的对象的下标,返回值为:"+coursesToSelect.indexOf("dd"));
        // 结果--现在查询一个不存在的对象的下标,返回值为:-1
        System.out.println();
        
        //3.add(int index, E element) 将指定的元素插入此列表中的指定位置(可选操作)。 
        coursesToSelect.add(0, c2);
        System.out.print("添加了课程:");
        System.out.print(coursesToSelect.get(0).getId()+":"+coursesToSelect.get(0).getName());
        // 结果--添加了课程:2:课程二
        System.out.println("--此时课程一的下标为:"+coursesToSelect.indexOf(c1));
        // 结果--此时课程一的下标为:1
        System.out.println();
        
        /*
         * 4.Arrays.asList(obj):将参数obj(数组),转换为列表
         * 5.addAll(Collection<? extends E> c)
         * 6.addAll(int index, Collection<? extends E> c) 
         */
        
        // 新建数组---为方法4、5和6做准备
        Course[] courses = {new Course("3", "课程三"),new Course("4", "课程四")};
        Course[] courses2 = {new Course("5", "课程五"),new Course("6", "课程六")};
        
        //4.Arrays.asList(obj):将参数obj(数组),转换为列表
        List<Course> arrayToList = Arrays.asList(courses);//此时arrayToList是作为集合代替了数组courses
        List<Course> arrayToList2 = Arrays.asList(courses2);//此时arrayToList是作为集合代替了数组courses
        System.out.println();
        
        //5.addAll(Collection<? extends E> c)
        coursesToSelect.addAll(arrayToList);
        System.out.println("新添加了"+coursesToSelect.get(2).getName()+"和"+coursesToSelect.get(3).getName());
        // 新添加了课程三和课程四
        System.out.println();
        
        //6.addAll(int index, Collection<? extends E> c) 
        coursesToSelect.addAll(0,arrayToList2);
        System.out.println("此时下标为0和1的课程:"+coursesToSelect.get(0).getName()+"和"+coursesToSelect.get(1).getName());
        // 此时下标为0和1的课程:课程五和课程六
    }
    
    /**
     * 二、测试删除方法  
     */
    public void testDelete(){
        
        //7.remove(int index) :删除该列表中指定位置的元素
        System.out.println("删除前共有:"+coursesToSelect.size()+"个元素,下标为0的是"+coursesToSelect.get(0).getName());
        coursesToSelect.remove(0);
        System.out.println("删除下标为0的元素后,共有"+coursesToSelect.size()+"个元素下标为0的是"+coursesToSelect.get(0).getName());
        System.out.println();
        
        //8.boolean remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)
        //获取index=0的对象
        Course obj = coursesToSelect.get(0);
        System.out.println("调用boolean remove(Object o)前,下标0"+coursesToSelect.get(0).getName());
        System.out.println("从列表中删除指定元素的第一个出现(如果存在):"+coursesToSelect.remove(obj));
        System.out.println("调用boolean remove(Object o)后,下标0"+coursesToSelect.get(0).getName());
        System.out.println();
        
        //9.boolean removeAll(Collection<?> c) :从此列表中删除包含在指定集合中的所有元素

        Course[] courses = {new Course("3", "课程三"),new Course("4", "课程四")};
        List<Course> arrayToList2 = Arrays.asList(courses);//此时arrayToList是作为集合代替了数组courses
        System.out.println(arrayToList2.size());
        System.out.println(coursesToSelect.removeAll(arrayToList2));
        System.out.println(coursesToSelect.size());
        System.out.println(arrayToList2.size());
        System.out.println();
        
        //10.clear():从此列表中删除所有元素
        System.out.println("此时集合courseToSelect的长度为:"+coursesToSelect.size());
        coursesToSelect.clear();
        System.out.println("调用clear()方法后此时集合courseToSelect的长度为:"+coursesToSelect.size());
        
    }

    /**
     * 三、遍历集合
     */
    public void testErgodic(){  
        // 添加数据
        newData();
        
        //11.普通for循环
        
        System.out.println();
        System.out.println("普通for循环遍历集合");
        for (int i = 0; i < coursesToSelect.size(); i++) {
            
            System.out.println("  " + coursesToSelect.get(i).getId()+" : "+coursesToSelect.get(i).getName());
        }

        System.out.println();
        //12.foreach循环
        System.out.println("foreach循环");
        for (Course course : coursesToSelect) {
            System.out.println(course.getId()+" : "+course.getName());
        }
        System.out.println();
        
        //iterator() 以正确的顺序返回该列表中的元素的迭代器。 
        System.out.println("iterator()迭代器遍历集合");
        //第一步:创建迭代器对象
        Iterator it = coursesToSelect.iterator();
        //第二步:通过循环迭代  
        //hasNext():判断是否存在下一个元素  
        while(it.hasNext()){
            Course obj = (Course) it.next();
            System.out.println(obj.getName());
        }
        
    }
        
    /**
     * 四、判断方法(是否包含等方法)-有疑问。contains返回true和false
     */
    public void testBoolean(){
        newData();
        //14.boolean contains(Object o):如果此集合包含指定的元素,则返回true 
        // 判断一个对象是否在容器中
        // 判断标准: 是否是同一个对象,而不是name是否相同
        Course newc6 = new Course("6", "课程一");
        Course newc7 = new Course("3", "课程单独二");
        System.out.println(coursesToSelect.contains(newc6));
        System.out.println(coursesToSelect.contains(newc7));
        // ?直接调用contains方法会依次比较内容,有相同的就返回true,因为此时每个对象里面有两个小对象定义的属性相同,?所有有一个相同就true?
        // ?自己定义的元素,应该重写equals()方法!这里和预想有误
        
        //15.boolean containsAll(Collection<?> c)
        List<Course> testList = new ArrayList<Course>();
        Course newc8 = new Course("1", "课程一");
        Course newc9 = new Course("3", "课程三");
        coursesToSelect.add(newc8);
        coursesToSelect.add(newc9);
        testList.add(newc8);
        testList.add(newc9);
        System.out.println(coursesToSelect.contains(testList));//数值相同,但是对象不同,所以也是返回false
        testForeach();
    }
    
    /**
     * 五、修改
     */
    public void testSet(){
        newData();
        //set(int index, E element)
        Course c6 = new Course("6", "课程六");
        coursesToSelect.set(0, c6);
        testForeach();//修改了第一个课程
    }
    
    /**
     * 17..replaceAll(UnaryOperator<E> operator) :将该列表的每个元素替换为将该运算符(operator)应用于该元素的结果。 
     */
    public void testReplaceAll(){
        
        List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        System.out.println("一开始list:"+list);
        // replaceAll是Collections的方法
        Collections.replaceAll(list, 1, 111);
        System.out.println(list);
    }
    
    /**
     * sort
     */
    public void testSort(){
        List<Integer> nums = new ArrayList<Integer>();  
        nums.add(3);  
        nums.add(5);  
        nums.add(1);  
        nums.add(0);  
        System.out.println(nums);  
        Collections.sort(nums);  
        System.out.println(nums);
    }



    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TestList testList = new TestList();
        System.out.println("-----------调用方法testAdd()-----------");
//      testList.testAdd();
        System.out.println();
        
        System.out.println("-----------调用方法testDelete()-----------");
//      testList.testDelete();
        System.out.println();
        
        System.out.println("-----------调用方法testErgodic()-----------");
//      testList.testErgodic();
        System.out.println();
        
        System.out.println("-----------调用testBoolean()");
//      testList.testBoolean();
        System.out.println();
        
        System.out.println("-----------调用testSet()");
//      testList.testSet();
        System.out.println();
        
        System.out.println("-----------调用testReplaceAll()");
//      testList.testReplaceAll();
        System.out.println();
        
        System.out.println("-----------调用testSort()");
        testList.testSort();
        System.out.println();
    }

}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,408评论 4 371
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,690评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,036评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,726评论 0 221
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,123评论 3 296
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,037评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,178评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,964评论 0 213
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,703评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,863评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,333评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,658评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,374评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,195评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,988评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,167评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,970评论 2 279

推荐阅读更多精彩内容