• java学习笔记(16-集合)


    1.集合Collection

    1.1 常用功能

    boolean add(Object e): 向集合中添加元素
    void clear():清空集合中所有元素
    boolean contains(Object o):判断集合中是否包含某个元素
    boolean isEmpty():判断集合中的元素是否为空
    boolean remove(Object o):根据元素的内容来删除某个元素
    int size():获取集合的长度
    Object[] toArray():能够将集合转换成数组并把集合中的元素存储到数组中
    

    代码:

    package com.daigua16;
    
    import java.util.ArrayList;
    import java.util.Collection;
    
    //boolean add(Object e): 向集合中添加元素
    //void clear():清空集合中所有元素
    //boolean contains(Object o):判断集合中是否包含某个元素
    //boolean isEmpty():判断集合中的元素是否为空
    //boolean remove(Object o):根据元素的内容来删除某个元素
    //int size():获取集合的长度
    //Object[] toArray():能够将集合转换成数组并把集合中的元素存储到数组中
    public class CollectionDemo1 {
        public static void main(String[] args) {
            // Collection是接口 不能实例化
            // 这里利用多态创建对象
            Collection c = new ArrayList<String>(10);
            System.out.println(c);
    
            // add 添加元素
            System.out.println(c.add("我是你爸爸"));
            System.out.println(c.add("我是你妈妈"));
            System.out.println(c.add("我是你奶奶"));
            System.out.println(c);
    
            // clear 清空结合中所有元素
    //      c.clear();
            System.out.println(c);
    
            // contains 判断是否包含某个元素
            System.out.println(c.contains("我是你爸爸"));
            
            // isEmpty 判断集合中的元素是否为空
            System.out.println(c.isEmpty());
            
            // remove 根据元素的内容来删除某个元素
            System.out.println(c.remove("我是你奶奶"));
            System.out.println(c);
            
            // size 获取集合长度
            System.out.println(c.size());
            
            // toArray 将集合转换成数组
            Object[] s = c.toArray();
            for (int i = 0; i < s.length; i++) {
                System.out.println(s[i]);
            }
        }
    }
    

    1.2 迭代器

    java中提供了很多个集合,它们在存储元素时,采用的存储方式不同。我们要取出这些集合中的元素,可通过一种通用的获取方式来完成。
    Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
    集合中把这种取元素的方式描述在Iterator接口中。Iterator接口的常用方法如下
    hasNext()方法:判断集合中是否有元素可以迭代
    next()方法:用来返回迭代的下一个元素,并把指针向后移动一位。
    

    代码:

    package com.daigua16;
    
    import java.util.Collection;
    import java.util.ArrayList;
    import java.util.Iterator;
    
    //hasNext()方法:判断集合中是否有元素可以迭代
    //next()方法:用来返回迭代的下一个元素,并把指针向后移动一位。
    
    public class IteratorDemo {
        public static void main(String[] args) {
            Collection c = new ArrayList();
            c.add("hello");
            c.add("world");
            c.add("java");
    
            // 获取迭代器对象
            Iterator it = c.iterator();
    
            while (it.hasNext()) {
                System.out.println(it.next());
            }
        }
    }
    

    1.3 并发修改异常

    并发修改异常产生原因:
          当使用迭代器遍历集合的时候,使用了集合中的 增加/删除 方法,导致并发修改异常产
    

    代码:

    package com.daigua16;
    
    import java.util.Iterator;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.ListIterator;
    import java.util.Collection;
    
    //需求:判断集合中是否包含元素java,如果有则添加元素android
    
    public class IteratorDemo2 {
        public static void main(String[] args) {
    //      Collection c = new ArrayList();
            List c = new ArrayList();
            c.add("java");
            c.add("python");
            c.add("c");
    
            Iterator it = c.iterator();
    
    //      会报错
    //      while (it.hasNext()) {
    //          if (it.next().equals("java")) {
    //              c.add("android");
    //          }
    //      }
    
            ListIterator lit = c.listIterator();
            while (lit.hasNext()) {
                if (lit.next().equals("java")) {
                    lit.add("android");
                }
            }
            // 这里要倒着遍历
            while (lit.hasPrevious()) {
                System.out.println(lit.previous());
            }
    
        }
    }
    

    2.增强for&泛型

    2.1 泛型的使用

    当类上定义<>的时候就可以使用泛型,例如ArrayList类的定义:
    class  ArrayList<E>,那么我们在创建ArrayList对象的时候就可以指定<>中E的类型
    ArrayList<String> al=new ArrayList<String>(),那么String就把E替换掉了
    

    代码:

    package com.daigua16;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    public class GenericDemo {
        public static void main(String[] args) {
            Collection<Student> s = new ArrayList<Student>();
            s.add(new Student("呆瓜", 18));
            s.add(new Student("猪娃", 19));
    
            Iterator<Student> its = s.iterator();
            while (its.hasNext()) {
                Student temp_s = (Student) its.next();
                System.out.println(temp_s);
            }
        }
    }
    
    class Student {
        String name;
        int age;
    
        public Student(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Student [name=" + name + ", age=" + age + "]";
        }
    
    }
    

    2.2 增强for

    格式:
    for(元素的数据类型  变量 : Collection集合or数组){
    }
    

    代码:

    package com.daigua16;
    
    import java.util.ArrayList;
    import java.util.Collection;
    
    public class ForEachDemo {
        public static void main(String[] args) {
            Collection<Student> s = new ArrayList<Student>();
            s.add(new Student("呆瓜", 18));
            s.add(new Student("猪娃", 19));
            
            for (Student student : s) {
                System.out.println(student);
            }
        }
    }
    

    3.List子体系

    3.1 List特有功能

    package com.daigua16;
    
    import java.util.List;
    import java.util.ArrayList;
    
    /*
     * void add(int index, E element) :将元素添加到index索引位置上
            E get(int index) :根据index索引获取元素
            E remove(int index) :根据index索引删除元素
            E set(int index, E element):将index索引位置的的元素设置为element
     * */
    public class ListDemo1 {
        public static void main(String[] args) {
            List<String> la = new ArrayList<String>();
    
            la.add("我是你爸爸!");
            la.add("1");
            System.out.println(la);
    
            System.out.println(la.get(0));
    
    //      System.out.println(la.remove(0));
    
            System.out.println(la.set(1, "2"));
    
            System.out.println(la);
        }
    }
    

    3.2 LinkedList特有功能

     LinkedList底层使用的是链表结构,因此增删快,查询相对ArrayList较慢
     void addFirst(E e) :向链表的头部添加元素
     void addLast(E e):向链表的尾部添加元素
     E getFirst():获取链头的元素,不删除元素
     E getLast():获取链尾的元素,不删除元素
     E removeFirst():返回链头的元素并删除链头的元素
     E removeLast():返回链尾的元素并删除链尾的元素
    

    代码:

    package com.daigua16;
    
    import java.util.LinkedList;
    /*
     * List的常用子类:
     *      ArrayList
     *          底层是数组结构,查询快,增删慢
     *      LinkedList
     *          底层结构是链表,查询慢,增删快
     * 
     * 如何选择使用不同的集合?
     *      如果查询多,增删少,则使用ArrayList
     *      如果查询少,增删多,则使用LinkedList
     *      如果你不知道使用什么,则使用ArrayList
     * 
     * LinkedList的特有功能:
     *          void addFirst(E e)  
     *          void addLast(E e) 
                E getFirst()  
                E getLast()  
                E removeFirst() 
                E removeLast() 
     *              
     */
    
    public class LinkedListDemo {
        public static void main(String[] args) {
            LinkedList<String> ll = new LinkedList<String>();
    
            ll.add("我是你爸爸");
            ll.add("我是你爷爷");
            ll.add("我是你奶奶");
            System.out.println(ll);
    
            ll.addFirst("我是你妈妈");
            System.out.println(ll);
    
            ll.addLast("我是个JB");
            System.out.println(ll);
    
            System.out.println(ll.getFirst());
            System.out.println(ll.getLast());
    
            ll.removeFirst();
            System.out.println(ll);
            ll.removeLast();
            System.out.println(ll);
    
        }
    }
    

    3.3 练习

    需求:定义一个方法,返回指定列表中指定元素的索引位置
    代码:

    package com.daigua16;
    
    import java.util.ArrayList;
    import java.util.List;
    // 需求:定义一个方法,返回指定列表中指定元素的索引位置
    // 判断元素是否存在
    
    public class TestDemo {
        public static void main(String[] args) {
            List ll = new ArrayList();
            ll.add("aa");
            ll.add("bb");
            ll.add("cc");
            ll.add("dd");
    
            System.out.println(getIndex(ll, "bcb"));
    
            System.out.println(isExist(ll, "aa1"));
        }
    
        // 第一个参数是List类 第二个参数是Object类,因为java中从集合取出的元素就是Object类
        private static int getIndex(List list, Object other) {
            for (Object l : list) {
                if (l.equals(other)) {
                    return list.indexOf(other);
                }
            }
            return -1;
        }
    
        private static boolean isExist(List list, Object other) {
            for (Object l : list) {
                if (l.equals(other)) {
                    return true;
                }
            }
            return false;
        }
    }
    
  • 相关阅读:
    poj2187 Beauty Contest (凸包 + 旋转卡壳)
    codevs1298, hdu1392 (凸包模板)
    Codeforces Round #427 (Div. 2) E. The penguin's game (交互题,二进制分组)
    poj1655 Balancing Act (dp? dfs?)
    poj1654 -- Area (任意多边形面积)
    codeforces#426(div1) B
    poj1011 Sticks (搜索经典好题)
    考试题
    使用SMM框架开发企业级应用-----打印机案例
    使用SMM框架开发企业级应用-----Spring简介即Spring Ioc
  • 原文地址:https://www.cnblogs.com/daigua/p/java-xue-xi-bi-ji-16ji-he.html
Copyright © 2020-2023  润新知