• JAVASE02-Unit04: 集合框架 、 集合操作 —— 线性表


       Unit04: 集合框架 、 集合操作 —— 线性表    

    操作集合元素相关方法

    package day04;
    
    import java.util.ArrayList;
    import java.util.Collection;
    
    import day02.Point;
    
    /**
     * 操作集合元素相关方法
     * @author adminitartor
     *
     */
    public class Collection_Remove {
        public static void main(String[] args) {
            Collection c = new ArrayList();
            c.add(new Point(1,2));
            c.add(new Point(3,4));
            c.add(new Point(5,6));
            c.add(new Point(1,2));
            
            System.out.println(c);
            
            Point p = new Point(1,2);
            /*
             * boolean remove(E e)
             * 从集合中删除给定元素
             * 将给定元素与集合现有元素顺序进行equals
             * 比较,并删除第一个与之比较为true的元素
             * 若成功删除元素则返回true
             */
            c.remove(p);
            System.out.println(c);
        }
    }
    Collection_Remove.java

    集合操作

    package day04;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.HashSet;
    
    /**
     * 集合操作
     * @author adminitartor
     *
     */
    public class Collection_Methods {
        public static void main(String[] args) {
            Collection c1 = new ArrayList();
            c1.add("java");
            c1.add("c++");
            c1.add("c#");
            
            Collection c2 = new HashSet();
            c2.add("android");
            c2.add("ios");
            c2.add("java");
            /*
             * boolean addAll(Collection c)
             * 将给定集合中的所有元素添加到当前集合
             * 中,方法调用完毕后当前集合元素发生了
             * 变化,则返回true
             */
            c1.addAll(c2);
            System.out.println(c1);
            
            Collection c3 = new ArrayList();
            c3.add("android");
            c3.add("c#");
    //        c3.add("php");
            /*
             * boolean containsAll(Collection c)
             * 判断当前集合是否包含给定集合中的所有
             * 元素
             */
            boolean contains = c1.containsAll(c3);
            System.out.println("全包含:"+contains);
            
            /*
             * 删除当前集合中与给定集合共有元素
             */
            c1.removeAll(c3);
            System.out.println(c1);
        }
    }
    Collection_Methods.java

    遍历集合

    package day04;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    /**
     * 遍历集合
     * 集合提供了通用的遍历元素方式:迭代器模式。
     * 迭代器java.util.Iterator是一个接口。
     * 不同的集合实现类都提供了一个可以遍历自身元素的
     * 迭代器实现类,我们无需记住每个迭代器实现类的名字
     * 只要当Iterator看待可以操作并遍历集合元素即可。
     * 
     * 迭代器遍历集合元素遵循:
     * 问,取,删 的步骤
     * 其中删除元素操作不是必要操作。
     * @author adminitartor
     *
     */
    public class Collection_Iterator {
        public static void main(String[] args) {
            Collection c = new ArrayList();
            c.add("one");
            c.add("#");
            c.add("two");
            c.add("#");
            c.add("three");
            c.add("#");
            c.add("four");
            c.add("#");
            c.add("five");
            System.out.println(c);
            
            //获取用于遍历该集合元素的迭代器
            Iterator it = c.iterator();
            /*
             * boolean hasNext()
             * 判断集合是否还有元素可以取出
             */
            while(it.hasNext()){
                /*
                 * E next()
                 * 取出下一个元素
                 */
                String str = (String)it.next();
                if("#".equals(str)){
                    /*
                     * 在使用迭代器遍历集合元素时,
                     * 不要通过集合的方法修改元素数量,
                     * 否则会抛出异常
                     */
    //                c.remove(str);
                    /*
                     * 迭代器的remove方法可以将刚
                     * 通过next方法取出的元素从集合
                     * 中删除。
                     */
                    it.remove();
                }
                System.out.println(str);
            }
            
            System.out.println(c);
        }
    }
    Collection_Iterator.java

    增强for循环

    package day04;
    /**
     * 增强for循环
     * 也称为新循环,for each
     * JDK1.5之后推出的新特性
     * 新循环不能替代传统循环的工作,新循环使用来遍历
     * 集合或数组的
     * @author adminitartor
     *
     */
    public class NewFor_Array {
        public static void main(String[] args) {
            String[] array = {"one","two","three","four","five"};
            
            for(int i=0;i<array.length;i++){
                String str = array[i];
                System.out.println(str);
            }
            
            for(String str : array){
                System.out.println(str);
            }
        }
    }
    NewFor_Array.java

    使用新循环遍历集合

    package day04;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    /**
     * 使用新循环遍历集合
     * @author adminitartor
     *
     */
    public class NewFor_Collection {
        public static void main(String[] args) {
            Collection c = new ArrayList();
            c.add("one");
            c.add("two");
            c.add("three");
            c.add("four");
            c.add("five");
            /*
             * 新循环并非新的语法,JVM并不认可新循环
             * 而是编译器认可。
             * 编译器在编译源程序时,会将新循环遍历
             * 集合改为使用迭代器遍历。
             * 为此,新循环在遍历集合时,不能通过集合
             * 的方法修改元素数量。
             */
            for(Object o : c){
    //        Iterator it = c.iterator();
    //        while(it.hasNext()){
    //            Object o = it.next();
                String str = (String)o;
                System.out.println(str);
            }
        }
    }
    NewFor_Collection.java

    测试泛型的使用

    package day04;
    /**
     * 测试泛型的使用
     * @author adminitartor
     *
     */
    public class TestPoint {
        public static void main(String[] args) {
            Point<Integer> p1 
                = new Point<Integer>(1,2);
            p1.setX(2);
            int x1 = p1.getX();
            System.out.println("x1:"+x1);
            
            Point<Double> p2 
                = new Point<Double>(1.1,2.2);
            p2.setX(2.2);
            double x2 = p2.getX();
            System.out.println("x2:"+x2);
            
            Point<String> p3 
                = new Point<String>("一","二");
            p3.setX("二");
            String x3 = p3.getX();
            System.out.println("x3:"+x3);
            
        }
    }
    TestPoint.java

    泛型  JDK1.5之后推出的新特性

    package day04;
    /**
     * 泛型  JDK1.5之后推出的新特性
     * @author adminitartor
     *
     */
    public class Point<T> {
        private T x;
        private T y;
        public Point(T x, T y) {
            super();
            this.x = x;
            this.y = y;
        }
        public T getX() {
            return x;
        }
        public void setX(T x) {
            this.x = x;
        }
        public T getY() {
            return y;
        }
        public void setY(T y) {
            this.y = y;
        }
        
        @Override
        public String toString() {
            return "("+x+","+y+")";
        }
    }
    Point.java

    泛型并非虚拟机认可,而是编译器认可,泛型的原型就是Object。

    package day04;
    /**
     * 泛型并非虚拟机认可,而是编译器认可
     * 泛型的原型就是Object。所以,Point中所有<T>的地方
     * 会被编译器改为Object
     * 编译器在检查使用泛型的地方时做如下操作:
     * 在给一个泛型赋值时,检查实际的值是否满足类型要求
     * 获取一个泛型的值时,会自动添加类型转换代码
     * @author adminitartor
     *
     */
    public class TestPoint2 {
        public static void main(String[] args) {
            /*
             * Point里面的x,y实际是Object
             * 由于有泛型,编译器会检查构造方法中
             * 实际传入的值是否符合Integer的类型,
             * 不符合编译不通过
             */
            Point<Integer> p1 
                = new Point<Integer>(1,2);
            
            p1.setX(2);
            /*
             * 编译后的class文件中编译器会补上向下
             * 造型的代码:
             * int x1 = (Integer)p1.getX();
             */
            int x1 = p1.getX();
            System.out.println("x1:"+x1);
            /*
             * 不指定泛型的实际类型那么则使用默认
             * 的Object
             */
            Point p2 = p1;
            p2.setX("二");
            System.out.println("x2:"+p2.getX());//"二"
            
            x1 = p1.getX();//ClassCastException
            System.out.println(x1);//?
        }
    }
    TestPoint2.java

    泛型在集合中的应用

    package day04;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    /**
     * 泛型在集合中的应用
     * 集合在泛型中是用来规定集合中的元素类型
     * @author adminitartor
     *
     */
    public class Collection_Type {
        public static void main(String[] args) {
            Collection<String> c
                = new ArrayList<String>();
            c.add("one");
            c.add("two");
            c.add("three");
            c.add("four");
            
            for(String str : c){
                System.out.println(str);
            }
            /*
             * 迭代器也支持泛型,而泛型的实际类型与
             * 其遍历的集合的泛型类型一致即可
             */
            Iterator<String> it = c.iterator();
            while(it.hasNext()){
                String str = it.next();
                System.out.println(str);
            }
        }
    }
    Collection_Type.java

    List集合

    package day04;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * List集合
     * List是可重复集,并且有序
     * 特点是可以像数组一样,通过下标操作元素
     * 并且也提供了一系列根据下标操作元素的方法
     * @author adminitartor
     *
     */
    public class List_Get_Set {
        public static void main(String[] args) {
            List<String> list 
                = new ArrayList<String>();
            
            list.add("one");
            list.add("two");
            list.add("three");
            list.add("four");
            System.out.println(list);
            
            /*
             * E get(int index)
             * 获取给定下标处的元素
             */
            //获取第二个元素
            String str = list.get(1);
            System.out.println(str);
            //可以使用传统for循环遍历List集合
            for(int i=0;i<list.size();i++){
                str = list.get(i);
                System.out.println(str);
            }
            
            /*
             * E set(int index,E e)
             * 将给定元素设置到指定位置处,返回值
             * 为原位置对应的元素。
             */
            //[one,two,three,four,five]
            String old = list.set(1, "2");
            System.out.println(list);
            System.out.println(old);
        }
    }
    List_Get_Set.java

    List提供了一对重载的add,remove方法

    package day04;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * List提供了一对重载的add,remove方法
     * @author adminitartor
     *
     */
    public class List_Add_Remove {
        public static void main(String[] args) {
            List<String> list
                = new ArrayList<String>();
            list.add("one");
            list.add("two");
            list.add("three");
            list.add("four");
            System.out.println(list);
            /*
             * void add(int index,E e)
             * 向集合指定位置插入给定元素
             */
            //[one,2,two,three,four]
            list.add(1, "2");
            System.out.println(list);
            
            /*
             * E remove(int index)
             * 删除给定位置上的元素并将其返回
             */
            //[one,2,three,four]
            String old = list.remove(2);
            System.out.println(list);
            System.out.println(old);
        }
    }
    List_Add_Remove.java

    截取List集合的子集

    package day04;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 截取List集合的子集
     * @author adminitartor
     *
     */
    public class List_Sublist {
        public static void main(String[] args) {
            List<Integer> list
                = new ArrayList<Integer>();
            
            for(int i=0;i<10;i++){
                list.add(i);
            }
            System.out.println(list);
            //取3-7
            List<Integer> subList 
                = list.subList(3, 8);
            System.out.println(subList);
            
            //将子集元素扩大10倍
            for(int i=0;i<subList.size();i++){
                subList.set(i, subList.get(i) * 10);
            }
            
            System.out.println(subList);
            /*
             * 对子集元素的操作就是对原集合相应内容
             * 的操作
             */
            System.out.println(list);
            
            /*
             * 删除3-7
             */
            list.subList(3, 8).clear();
            System.out.println(list);
        }
    }
    List_Sublist.java

    集合转换为数组

    package day04;
    
    import java.util.ArrayList;
    import java.util.Collection;
    
    /**
     * 集合转换为数组
     * Collection提供了方法:toArray
     * @author adminitartor
     *
     */
    public class CollectionToArray {
        public static void main(String[] args) {
            Collection<String> c
                = new ArrayList<String>();
            c.add("one");
            c.add("two");
            c.add("three");
            c.add("four");
            System.out.println(c);
            //不常用
    //        Object[] array = c.toArray();
            
            String[] array 
                = c.toArray(new String[c.size()]);
            System.out.println("len:"+array.length);
            for(String str : array){
                System.out.println(str);
            }
        }
    }
    CollectionToArray.java

    数组转换为集合

    package day04;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    /**
     * 数组转换为集合
     * 使用数组的工具类Arrays的静态方法asList
     * 需要注意,只能将数组转换为List集合。
     * @author adminitartor
     *
     */
    public class ArrayToList {
        public static void main(String[] args) {
            String[] array = {"one","two","three","four"};
            
            List<String> list = Arrays.asList(array);
            System.out.println(list.size());
            System.out.println(list);
            /*
             * 修改集合元素就是修改原数组对应元素
             */
            list.set(1, "2");
            System.out.println(list);
            
            for(String str : array){
                System.out.println(str);
            }
            /*
             * 添加新元素会导致数组扩容,不允许这样
             * 做,因为这样不能表示原数组了。
             */
    //        list.add("five");//会抛出异常
    //        System.out.println(list);
            /*
             * 若想添加新元素,可以自行实例化一个集合
             */
            List<String> list1 
                = new ArrayList<String>(list);
    //        list1.addAll(list);
            list1.add("five");
            System.out.println(list1);
        }
    }
    ArrayToList.java

    使用集合的工具类Collections的静态方法sort,可以对List集合进行自然排序(从小到大)

    package day04;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import java.util.Random;
    
    /**
     * 使用集合的工具类Collections的静态方法sort
     * 可以对List集合进行自然排序(从小到大)
     * @author adminitartor
     *
     */
    public class SortList {
        public static void main(String[] args) {
            List<Integer> list
                = new ArrayList<Integer>();
            
            Random random = new Random();
            for(int i=0;i<10;i++){
                list.add(random.nextInt(100));
            }
            System.out.println(list);
            Collections.sort(list);
            System.out.println(list);
        }
    }
    SortList.java

  • 相关阅读:
    VB Script学习
    [杂项笔记] linux下查看so依赖的库
    从文件名中删除下划线
    智联招聘基于 Nebula Graph 的推荐实践分享
    基于 Nebula Graph 构建百亿关系知识图谱实践
    使用 MyBatis 操作 Nebula Graph 的实践
    Nebula Importer 数据导入实践
    leetcode695dfs
    docer redis
    leet1905回溯
  • 原文地址:https://www.cnblogs.com/tangshengwei/p/6227829.html
Copyright © 2020-2023  润新知