zoukankan      html  css  js  c++  java
  • 集合

    集合:存储对象的容器

    集合的出现就是为了持有对象。集合中可以存储任意类型的对象而且长度可变

    集合和数组的区别:

    数组和集合类都是容器

    数组长度是固定的,集合长度是可变的。

    数组中可以存储基本数据类型,集合只能存储对象,

    数组中存储数据类型是单一的,集合中可以存储任意类型的对象。

    集合框架:

    什么时候该使用什么样的集合:

    Iterable:Collection的父接口实现了Iterable的类就是可迭代的

    迭代器:

    为了方便的处理集合中的元素,Java中出现了一个对象,该对象提供了一些方法专门处理集合中的元素.例如删除和获取集合中的元素.该对象就叫做迭代器(Iterator)

    如何获取迭代器?

    Collection接口中定义了获取集合类迭代器的方法(iterator())。

    //迭代器遍历:(while)
    public static void main(String[] args) {
            ArrayList list = new ArrayList();
            // 增加:add() 将指定对象存储到容器中
            list.add("计算机网络");
            list.add("现代操作系统");
            list.add("java编程思想");
            list.add("java核心技术");
            list.add("java语言程序设计");
            System.out.println(list);
            Iterator it = list.iterator();
            while (it.hasNext()) {
                String next = (String) it.next();
                System.out.println(next);
            }
        }
    //for循环
    import java.util.ArrayList;
    import java.util.Iterator;
    
    public class Demo2 {
        public static void main(String[] args) {
            ArrayList list = new ArrayList();
            // 增加:add() 将指定对象存储到容器中
            list.add("计算机网络");
            list.add("现代操作系统");
            list.add("java编程思想");
            list.add("java核心技术");
            list.add("java语言程序设计");
            System.out.println(list);
    
            for (Iterator it = list.iterator(); it.hasNext();) {
                 //迭代器的next方法返回值类型是Object,所以要记得类型转换。
                String next = (String) it.next();
                System.out.println(next);
            }
        }
    }

    Map:

    Map中的元素是两个对象,一个对象作为键,一个对象作为值。键不可以重复,但是值可以重复。

    Map与Collection在集合框架中属并列存在

    Map存储的是键值对

    Map存储元素使用put方法,Collection使用add方法

    Map集合没有直接取出元素的方法,而是先转成Set集合,在通过迭代获取元素

    Map集合中键要保证唯一性

    Collections与Arrays

    (Collections)集合框架中的工具类,特点:该工具类中的方法都是静态的。

    Collections:常见方法:

    1, 对list进行二分查找:

    前提该集合一定要有序。

    int binarySearch(list,key);

    //必须根据元素自然顺序对列表进行升级排序

    //要求list 集合中的元素都是Comparable 的子类。

    int binarySearch(list,key,Comparator);

    2,对list集合进行排序。

    sort(list); 

    //list进行排序,其实使用的事list容器中的对象的compareTo方法

    sort(list,comaprator);

    //按照指定比较器进行排序

    3,对集合取最大值或者最小值。

    max(Collection)

    max(Collection,comparator)

    min(Collection)

    min(Collection,comparator)
    4,对list集合进行反转。

    reverse(list);

    5,对比较方式进行强行逆转。

    Comparator reverseOrder();

    Comparator reverseOrder(Comparator);

    6,对list集合中的元素进行位置的置换。

    swap(list,x,y);

    7,对list集合进行元素的替换。如果被替换的元素不存在,那么原集合不变。

    replaceAll(list,old,new);

    8,可以将不同步的集合变成同步的集合。

    Set synchronizedSet(Set<T> s)

    Map synchronizedMap(Map<K,V> m)

    List synchronizedList(List<T> list)

    9. 如果想要将集合变数组:

    可以使用Collection 中的toArray 方法。注意:是Collection不是Collections工具类

    传入指定的类型数组即可,该数组的长度最好为集合的size。

    Arrays:用于对数组操作的工具

    1二分查找,数组需要有序

    binarySearch(int[])

    binarySearch(double[])

    2数组排序

    sort(int[])

    sort(char[])……

    1, 将数组变成字符串。

     toString(int[])

    2, 复制数组。
     copyOf();

    3, 复制部分数组。

    copyOfRange():

    4, 比较两个数组是否相同。

    equals(int[],int[]);

    5, 将数组变成集合。

    List asList(T[]);

    这样可以通过集合的操作来操作数组中元素,

    但是不可以使用增删方法,addremove。因为数组长度是固定的,会出现

    UnsupportOperationExcetion

    可以使用的方法:containsindexOf。。。

    如果数组中存入的基本数据类型,那么asList会将数组实体作为集合中的元素。

    如果数组中的存入的引用数据类型,那么asList会将数组中的元素作为集合中

    的元素。

    泛型:

    集合类<类类型>  变量名  = new  集合类<类类型>();

    public class Demo5 {
        public static void main(String[] args) {
            // 使用泛型后,规定该集合只能放羊,老虎就进不来了.
            ArrayList<Sheep> arr = new ArrayList<Sheep>();
            arr.add(new Sheep("美羊羊"));
            arr.add(new Sheep("懒洋洋"));
            arr.add(new Sheep("喜羊羊"));
            // 编译失败
            // arr.add(new Tiger("东北虎"));
            System.out.println(arr);
            Iterator<Sheep> it = arr.iterator();
            while (it.hasNext()) {
                // 使用泛型后,不需要强制类型转换了
                Sheep next = it.next();
                next.eat();
            }
    
        }
    }
    
    class Tiger {
        String name;
    
        public Tiger() {
    
        }
    
        public Tiger(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {
    
            return "Tiger@name:" + this.name;
        }
    
        public void eat() {
            System.out.println(this.name + "吃羊");
        }
    }
    
    class Sheep {
        String name;
    
        public Sheep() {
    
        }
    
        public Sheep(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "Sheep@name:" + this.name;
        }
    
        public void eat() {
            System.out.println(this.name + "吃青草");
        }
    }

    什么时候使用泛型:当类中操作的引用数据类型不确定的时候,就可以使用泛型类.

  • 相关阅读:
    HTTP 03 HTTP 报文头
    HTTP 02 HTTP1.1 协议
    HTML 01 请求过程
    Java_异常_04_ OutOfMemoryError系列
    mq_学习_01_消息中间件的概述
    mq_学习_00_资源帖
    Java钉钉开发_异常_01_error code:50002, error message:请求的员工userid不在授权范围内
    Java_JS_01_java调用js
    JavaUtil_09_email_使用 commons-email 发送邮件
    JavaUtil_08_StringUtil_commons-lang3 之 StringUtils
  • 原文地址:https://www.cnblogs.com/stellar/p/5232224.html
Copyright © 2011-2022 走看看