Java学习_Day 10(学习内容:尚硅谷集合JAVA零基础P523-P533)

P523 集合-使用Iterator遍历Collection

package com.collection;

import org.junit.Test;

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

public class IteratorTest {
    /**
     * 集合元素遍历
     */
    @Test
    public void test1(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new Person("Jerry",20));
        coll.add(new String("Tom"));
        coll.add(false);
        Iterator iterator = coll.iterator();
        // next
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());

//        for (int i = 0; i < coll.size(); i++) {
//            System.out.println(iterator.next());
//        }
        // hasNext
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

P524 集合-迭代器Iterator的执行原理

P525 集合-迭代器Iterator遍历集合的两种错误写法

    @Test
    public void test2(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new Person("Jerry",20));
        coll.add(new String("Tom"));
        coll.add(false);
        Iterator iterator = coll.iterator();
        // 错误方式1
        while((iterator.next()) != null){
            System.out.println(iterator.next());
        }
        // 错误方式2
        while(coll.iterator().hasNext()){
            System.out.println(coll.iterator().next());
        }
    }

P526 集合-Iterator迭代器remove的使用

    @Test
    public void test3(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new Person("Jerry",20));
        coll.add(new String("Tom"));
        coll.add(false);
        Iterator iterator = coll.iterator();
        while (iterator.hasNext()){
            Object obj = iterator.next();
            if ("Tom".equals(obj)){
                iterator.remove();
            }
        }
        iterator = coll.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

P527 集合-新特性foreach循环遍历集合或项目

package com.collection;

import org.junit.Test;

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

/**
 * 增强for循环,遍历集合和数组
 */
public class ForTest {
    @Test
    public void test1(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new Person("Jerry",20));
        coll.add(new String("Tom"));
        coll.add(false);
        // 增强循环仍然调用了迭代器
        for (Object obj : coll) {
            System.out.println(obj);
        }
    }
    @Test
    public void test2(){
        int[] arr = new int[]{1,2,3,4,5,6};
        for (int i : arr) {
            System.out.println(i);
        }
    }
    @Test
    public void test3(){
        String[] arr = new String[]{"MM","MM","MM"};
        for (int i = 0; i < arr.length; i++) {
            arr[i] = "GG";
        }
        // 不变
        for (String s : arr) {
            s = "GG";
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

P528 集合-List接口常用实现类的对比

package com.collection;

/**
 * List接口的实现类ArrayList、LinkedList、Vector
 * ArrayList、LinkedList、Vector的异同
 * 同:三个类都实现了List接口,存储数据特点相同,即存储有序、可重复的数据
 * 异: 1. ArrayList作为List接口的主要实现类   执行效率高、线程不安全的 底层使用object[]存储
 *     2. Vector是List接口的古老实现类   线程安全、执行效率低  底层使用objet[]存储
 *     3. LinkedList是List接口的次要实现类,底层使用的是双向链表存储  适合频繁的插入和删除操作,效率比ArrayList高
 */
public class ListTest {
}

P529 集合-ArrayList的源码分析

/**
 * JDK 7
 * ArrayList底层是object类型数组
 * 初始化容量为10
 * 如果容量不够,则扩容为原来的1.5倍
 * 并将原有数组中的数组复制到新的数组中
 * 结论:建议开发中使用带参构造器来初始化容量,空参构造器默认容量是10
 * JDK 8
 * 调用Add方法的时候才初始化了数组容量10
 * 小结:JDK7中的ArrayList对象创建类似于单例模式的饿汉式,而JDK8中的ArrayList对象的创建类似
 * 于单例的懒汉式,延迟了数组的创建,节省内存。
 */

P530 集合-LinkedList的源码分析

/**
 * 双向链表的一些常见操作
 */

P531 集合-Vector的源码分析

// 现已基本不用
// 和ArrayList底层相似,初始化数组容量为10,扩容为原来的二倍,是线程安全的

P532 集合-List接口的常用方法测试

package com.collection;

import org.junit.Test;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * List接口的实现类ArrayList、LinkedList、Vector
 * ArrayList、LinkedList、Vector的异同
 * 同:三个类都实现了List接口,存储数据特点相同,即存储有序、可重复的数据
 * 异: 1. ArrayList作为List接口的主要实现类   执行效率高、线程不安全的 底层使用object[]存储
 *     2. Vector是List接口的古老实现类   线程安全、执行效率低  底层使用objet[]存储
 *     3. LinkedList是List接口的次要实现类,底层使用的是双向链表存储  适合频繁的插入和删除操作,效率比ArrayList高
 */
// List接口中的常用方法
public class ListTest {
    @Test
    public void test1(){
        ArrayList list = new ArrayList();
        list.add(123);
        list.add(456);
        list.add("AA");
        list.add(new Person("Tom",12));
        list.add(456);

        System.out.println(list);
        //add
        list.add(1,"BB");
        System.out.println(list);
        //addAll
        List list1 = Arrays.asList(1, 2, 3);
        list.addAll(list1);
        System.out.println(list.size());
        //get
        System.out.println(list.get(0));
    }
    @Test
    public void test2(){
        ArrayList list = new ArrayList();
        list.add(123);
        list.add(456);
        list.add("AA");
        list.add(new Person("Tom",12));
        list.add(456);
        // indexOf
        int i = list.indexOf(456);
        System.out.println(i);
        // remove
        Object obj = list.remove(0);
        System.out.println(obj);
        System.out.println(list);
        // set
        list.set(1,"CC");
        System.out.println(list);
        // subList
        List list1 = list.subList(1, 3);
        System.out.println(list1);
    }

}

P533 集合-List遍历及方法总结

    /*
    总结:常用方法
    增:add
    删:remove 两个
    改:set
    查:get
    插:add
    长度:size
    遍历:迭代器+两种循环
     */
    @Test
    public void test3(){
        ArrayList list = new ArrayList();
        list.add(123);
        list.add(456);
        list.add("AA");
        // 迭代器
        Iterator iterator = list.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
        // 增强for循环
        for (Object obj : list) {
            System.out.println(obj);
        }
        // 普通for循环
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值