Javase:学习记录(3)

package com.bjpowernode.collection;

import java.text.Collator;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;

/**
 * Collection集合的基本操作
 */
public class Test01 {
    public static void main(String[] args) {
        //1) 创建Collection集合
        //Collection在Java中是一个接口, 需要赋值实现类对象, 可以给Collection接口引用赋值ArrayList对象,或者 HashSet对象,或者 LinkedList对象....
        Collection  collection = new ArrayList();   //new运算符在堆中创建ArrayList对象, 该ArrayList对象才是存储数据的容器, 定义了Collection接口引用指向堆中的ArrayList对象, 通过collection接口调用它的抽象方法时,实际执行的是ArrayList对象的方法, 这是多态
//        collection = new HashSet();

        //2) 向集合中添加数据调用add()方法, 集合中只能存储引用类型对象
        collection.add("hello");
        collection.add("world");
        //当向集合中添加基本类型数据时, 系统 会自动装箱
        collection.add(456);    //系统 会先把 456 自动装箱 为Integer对象, 再把Integer对象添加到集合中
        collection.add(3.14);   //会先根据3.14创建Double对象,再把Double对象添加到集合中
        collection.add( new Date() );

        //3) 直接打印collection, 当前collection实际引用的是ArrayList对象, 打印时会调用ArrayList对象的toString()方法
        System.out.println( collection );
        //[hello, world, 456, 3.14, Sat Oct 17 14:39:40 CST 2020]

        //4) foreach遍历集合中所有的数据
        for (Object o : collection) {
            System.out.println( o );
        }

        //5) 删除集合中的元素
        collection.remove("hello");
        System.out.println( collection);    //[world, 456, 3.14, Sat Oct 17 14:45:27 CST 2020]
        collection.remove("aaa");   //集合中没有"aaa"元素,删除失败,返回false
        System.out.println(collection);

        //6 判断
        System.out.println( collection.contains("456"));    //false
        System.out.println( collection.contains(456));    //true
        System.out.println( collection.isEmpty() );     //false
        System.out.println( collection.size() );    //4
    }
}

 

package com.bjpowernode.collection;

import javax.sound.midi.Soundbank;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

/**
 * 集合泛型与迭代
 */
public class Test02 {
    public static void main(String[] args) {
        /* 1)
           在实际开发中,通常情况下,在集合中只存储同一个类型的数据, 在创建Collection集合时,可以通过泛型指定集合中存储元素的数据类型
           泛型就是把数据类型作为参数传递
           Collection接口的定义如下:
                public interface Collection<E> extends Iterable<E> {}
            在Collection接口名后面有<E>, 这就是泛型,在创建Collection集合时,可以给泛型参数E传递一个数据类型, 这个数据类型就是在colleciton集合中存储元素的数据类型
         */
        //定义Collection集合存储String字符串, 给collection接口的泛型参数E传递String类型, 在new ArrayList对象时, ArrayList后面的尖括弧中不需要指定String类型, 系统 可以自动推断出来集合中存储的是String.  如果使用的JDK是1.6版本或者更早, 在创建ArrayList对象时需要指定泛型
        Collection<String> collection = new ArrayList<>();
//        Collection<String> collection = new HashSet<>();

        //2) 向集合中添加数据,只能添加泛型指定的String字符串
        collection.add("jj");
        collection.add("mm");
        collection.add("dd");
        collection.add("jj");
        collection.add("dd");
        collection.add("mm");
        //如果向集合中添加的数据不是泛型指定的String类型则语法错误, 这就是泛型 的好处,可以在编译阶段进行数据类型检查
//        collection.add(456);
        System.out.println(collection);     //[jj, mm, dd, jj, dd, mm]

        /*3)
                所有的Collection集合都有iterator()方法,该方法返回Iterator迭代器,可以迭代遍历集合中的每个元素
                1) 刚刚调用iterator()方法返回一个新的Iterator迭代器, Iterator迭代器有一个游标,指向第一个元素的前面
                2) iterator迭代器的hasNext()方法判断游标后面是否还有元素,如果有元素返回true,否则返回false
                3) Iterator迭代器的next()方法可以返回游标后面的元素, 并且把游标向后移, 如果游标已经指向最后一个元素的后面时, 再调用next()方法会产生java.util.NoSuchElementException没有元素异常
                可以结合 hasNext()方法 与 next() 方法实现集合中元素的遍历
         */
        Iterator<String> stringIterator = collection.iterator();        //Ctrl + Alt + V
        while ( stringIterator.hasNext() ){
            //当hasNext()返回true表示游标后面还有元素时, 调用next()把游标后面的元素返回
            System.out.println( stringIterator.next());
        }
        //循环结束后, stringIterator迭代器的游标就已经指向最后一个元素的后面了, stringIterator迭代器就不能再用了, 即Iterator迭代器是一次性的, 如果还想要迭代, 重新调用iterator()方法返回一个新的迭代器

        //4) 从集合中删除元素调用remove()方法, 只能删除第一个匹配的元素
        collection.remove("jj");
        System.out.println(collection);     //[mm, dd, jj, dd, mm]
        //需求:删除所有的mm, 可以使用循环删除
        while ( collection.contains("mm")){
            collection.remove("mm");
        }
        System.out.println( collection);
        //存在的问题: contains()判断时需要遍历一次集合, remove()删除时还需要遍历一次集合, 下次循环也是这样, 即需要遍历好多次集合
        //在删除集合中所有相同元素时,或者 删除集合中多个符合条件元素时,  可以使用迭代删除, 在实际开发中使用迭代时,可以直接输入 itco 生成for循环的迭代代码块,. 在for循环初始化表达式中调用iterator()返回一个迭代器 , 循环条件 是迭代器hasNext()为true表示游标后面还有元素, 在for循环体中调用next()返回游标后面的元素
        for (Iterator<String> iterator = collection.iterator(); iterator.hasNext(); ) {
            String next = iterator.next();
            if ("dd".equals(next)){
                iterator.remove();      //调用迭代器的remove()方法删除元素
                //注意: 在迭代过程中, 不能调用collection集合的add()/remove()方法, 可能会产生异常java.util.ConcurrentModificationException
//                collection.remove("dd");
            }
        }
        System.out.println( collection );   //[jj]

        //注意: foreach循环只能 读集合中的元素,在foreach循环期间, 如果调用collection集合的add()/remove()添加删除元素时,可能 会产生异常java.util.ConcurrentModificationException
    }
}
package com.bjpowernode.collection;

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

/**
 * Collection集合之间的操作
 */
public class Test03 {
    public static void main(String[] args) {
        //创建存储String字符串的集合
        Collection<String> collection = new ArrayList<>();
        //添加元素
        collection.add("aa");
        collection.add("bb");
        collection.add("cc");
        System.out.println(collection);         //[aa, bb, cc]

        //1) 可以在一个已存在的Collection集合上 创建一个新的Collection集合
        Collection<String> collection2 = new ArrayList<>(collection);
        System.out.println( collection2 );  //[aa, bb, cc]

        //2) 可以把一个集合中所有的元素添加到另外一个集合中
        Collection<String> collection3 = new ArrayList<>();
        System.out.println(collection3);    //[]
        collection3.addAll(collection);     //把参数collection集合中所有元素都添加到collection3中
        System.out.println( collection3 );  //[aa, bb, cc]

        //3) 可以从集合中删除在参数集合中出现的所有元素
        collection2.add("xx");
        collection2.add("aa");
        collection2.add("yy");
        System.out.println( collection2 );  //[aa, bb, cc, xx, aa, yy]
        collection2.removeAll(collection);  //遍历collection2集合中所有的元素,如果这个元素在参数collection集合中就删除
        System.out.println(collection2);    //[xx, yy]

        //4) 只保留 在参数集合中出现的元素
        collection3.addAll(collection2);
        System.out.println(collection3);    //[aa, bb, cc, xx, yy]
        collection3.retainAll(collection);  //遍历collection3集合中的元素,如果该元素在参数collection集合中就保留 , 不在collection集合中就删除
        System.out.println( collection3);   //[aa, bb, cc]
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值