Collection操作

1. Arrays的asList和集合构造器:

Arrays.asList() : 调用Arrays类的asList方法将集合转化为List。 

改变数组长度的操作是不能用的,因为数组长度是固定的。会抛出异常:
java.lang.UnsupportedOperationException(不支持的操作异常)
package com.zyq.se.collection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Author zhaoyq
 */
public class A1_ArrayToListDemo {

    public static void main(String[] args) {
        String[] arr = {"one","two","three","four","five"};

        //1.调用Arrays类的asList方法将集合转化为List
        List<String>  list= Arrays.asList(arr);
        System.out.println("list = " + list);

        //2.对该集合的操作就是对原数组对应的操作
        list.set(1,"xxx");
        System.out.println(" arr = " + Arrays.toString(arr) );

        //3.改变数组长度的操作是不能用的,因为数组长度是固定的。
        //会抛出异常:java.lang.UnsupportedOperationException(不支持的操作异常)
        //list.add("ten");

        //4.所有的集合都支持一个参数为Collection类型的构造器,作用是:
        // 在创建当前集合的同时 , 包含给定集合中的所有元素
        List<String> list2=new ArrayList<>(list);
        System.out.println("list2 =" + list2);

        list2.add("april");
        System.out.println("list2 =" + list2);

    }

}

2.Collection的增删查:

package com.zyq.se.collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 *  author zhaoyq
 *  Collection的添加, 求长度, 清空方法
 */
public class B1_CollectionDemo1 {

    public static void main(String[] args) {
        Collection c=new ArrayList();
        //1.向当前集合添加一个元素,元素成功添加后返回true。
        c.add("one");
        c.add("two");
        System.out.println(c.add("three"));
        c.add("one");
        System.out.println(c);


        //2.  int size():  返回当前集合的元素个数
        int size=c.size();
        System.out.println("size = " + size);

        //3.boolean isEmpty()  判断当前集合是否为一个空集
        boolean isEmpty=c.isEmpty();
        System.out.println("isEmpty = " + isEmpty);

        //4.boolean contains(Object o)判断当前集合是否包含给定元素:
        //  判断依据是该元素是否是否存在equals方法 和  集合现有元素是否存在equals
        boolean isContains=c.contains("two");
        System.out.println("isContains::" + isContains);

        System.out.println(c);
        //5.删除元素:  也就是删除与给定元素用equals比较为true的元素
        //    对于List而言,重复元素一次只会删除一个重复元素(其他重复元素需要再次删除)。
        c.remove("one");
        System.out.println(c);
        c.remove("one");
        System.out.println(c);


        //6. void clear()    清空集合
        c.clear();
        System.out.println(c);

    }

}

3.集合只能保存引用类型元素,并且保存的是元素的引用(地址)

//通过p修改age, 然后通过集合co获取元素被修改了
//证明: p变量存储逇是对象的内存引用(内存地址[相关的一个值]), 将其放入集合
//只是将p中的内存引用(内存地址[相关的一个值])放入了集合了。(所以用p修改对象属性发现集合中也 变了)
package com.zyq.se.collection;

import java.util.ArrayList;
import java.util.Collection;

public class B2_CollectionDemo2 {

    public static void main(String[] args) {
        //集合只能保存引用类型元素,并且保存的是元素的引用(地址)
        ArrayList c=new ArrayList();
        c.add(1);
        c.add(2);
        Object obj=c.get(1);
        System.out.println("::"+obj.getClass());// System.out.println("::"+obj.getClass());//


        class Person{
            int age=2;
            Person(int a){this.age=a;}
        }

        //集合只能保存引用类型元素,并且保存的是元素的引用(地址)
        Collection co=new ArrayList();
        Person p=new Person(20);
        co.add( p );
        p.age=30;
        //通过p修改age, 然后通过集合co获取元素被修改了
        //证明: p变量存储逇是对象的内存引用(内存地址[相关的一个值]), 将其放入集合
        //只是将p中的内存引用(内存地址[相关的一个值])放入了集合了。(所以用p修改对象属性发现集合中也 变了)
        for (Object per: co) {
            Person person=(Person)per;
            System.out.println( person.age );
        }
    }

}

/*

    //1.测试上个案例的ArrayList类的set方法
    List list=new ArrayList();
        list.add("aa");
                System.out.println(list);
                list.set(0, "xx");
                System.out.println(list);

                */

4.Collection的remove和contains

元素必须包含equals方法才符合remove和contains的逻辑

package com.zyq.se.collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Objects;

/**
 * 集合的某些操作会受元素equals方法影响。比如contains()和remove()
 * author zhaoYQ
 * contains: 判断集合中是否包含元素
 * remove: 从集合中删除元素
 */
public class B3_CollectionDemo3 {

    public static void main(String[] args) {
        class Person{
            int age;
            Person(int a){
                this.age=a;
            }

            public boolean equals(Object o) {
                if (this == o) return true;
                if (o == null || getClass() != o.getClass()) return false;
                Person person = (Person) o;
                return age == person.age;
            }

            public int hashCode() {
                return Objects.hash(age);
            }

            public String toString() {
                return "Person{" +"age=" + age +'}';
            }
        }

        Collection c = new ArrayList();
        c.add(new Person(1));
        c.add(new Person(3));
        c.add(new Person(5));
        c.add(new Person(7));
        c.add(new Person(9));
        c.add(new Person(2));
        c.add(new Person(1));

        /**
         * 1.集合类Collection重写了toString方法。格式为:
         *  [元素1.toString(), 元素2.toString(), 元素3.toString(), ....]
         */
        System.out.println("ArrayList集合元素:"+c.toString());


        /**
         * 2.Collection类的boolean contains(Object o)方法:
         *      判断当前集合是否包含给定元素:
         *      判断依据是该元素是否是否存在equals方法 和  集合现有元素是否存在equals
         */
        Person p=new Person(1);
        System.out.println(c.contains( p ));//true  (如果Person中没有equals方法就是false )

        /**
         * 3.删除元素也是删除与给定元素equals比较为true的元素
         *  对于List而言,重复元素一次只会删除一次(删除两个相同元素就得删除两次)
         */
        c.remove(p);
        System.out.println("ArrayList集合元素:"+c.toString());
        c.remove(p);
        System.out.println("ArrayList集合元素:"+c.toString());

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值