JavaCoreTechnology_Day10.11

2022/6/8 1:20:16

本文主要是介绍JavaCoreTechnology_Day10.11,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Day10

泛型程序设计

对于Java泛型的转换需要记住一下几个事实:

  1. 虚拟机中没有泛型,只有普通的类和方法
  2. 所有的类型参数都会替换为他们的限定类型
  3. 会合成桥方法来保持多态
  4. 为保持类型安全性,必要时会插入强制类型转换

Day11

集合

迭代器

package cn.gyk;

import java.util.ArrayList;

/**
 * @author Pickled
 * @version V1.0
 * @date 2022/6/5 14:11
 */
public class Iterator {
    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList<Integer>();
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
        arrayList.add(4);
        java.util.Iterator iterator = arrayList.iterator();
        iterator.forEachRemaining(System.out::println);
    }
}

集合在remove之前不调用next是不合法的

remove方法将删除刚刚被访问过的元素

package cn.gyk;

import java.util.Iterator;
import java.util.LinkedList;

/**
 * @author Pickled
 * @version V1.0
 * @date 2022/6/6 17:22
 */
public class ListDemo1 {
    public static void main(String[] args) {
        var staff = new LinkedList<String>();
        staff.add("Amy");
        staff.add("Bob");
        staff.add("Carl");
        Iterator<String> iterator = staff.iterator();
        String first = iterator.next();
        String second = iterator.next();
        iterator.remove();;
        System.out.println(staff);
    }
}

ListIterator接口可以提供反向遍历链表

import org.testng.annotations.Test;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;

/**
 * @author Pickled
 * @version V1.0
 * @date 2022/6/6 17:27
 */
public class ListTest {
    @Test
    public void test1(){
        var staff = new LinkedList<String>();
        staff.add("Amy");
        staff.add("Bob");
        staff.add("Carl");
        ListIterator<String> iterator = staff.listIterator();
        iterator.next();
        iterator.add("Juliet");
        iterator.add("Tom");
        System.out.println(staff);
        //多次调用  add 依次把元素添加到该迭代器位置之前
        //[Amy, Juliet, Tom, Bob, Carl]
		//而iterator接口只是将元素添加到集合的尾部
        //链表域泛型集合之间还是有很大区别
    }
}

通常需要用整数索引访问元素时,通常不使用链表,但是LinkedList还是有一个get方法,但是这个方法效率极低,是一个一个遍历链表查找的,但是做了一个小小的优化,当n大于size的二分之一时,就从尾部开始遍历。

对于LinkedList可以使用ListIterator类实现从两个方向遍历链表中的元素

import org.testng.annotations.Test;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;

/**
 * @author Pickled
 * @version V1.0
 * @date 2022/6/6 17:27
 */
public class ListTest {
    @Test
    public void test1(){
        var staff = new LinkedList<String>();
        staff.add("Amy");
        staff.add("Bob");
        staff.add("Carl");
        ListIterator<String> iterator = staff.listIterator();
        iterator.next();
        iterator.add("Juliet");
        iterator.add("Tom");
        System.out.println(staff);
        iterator.set("AAA");
        System.out.println(staff);
        //多次调用  add 依次把元素添加到该迭代器位置之前
        //[Amy, Juliet, Tom, Bob, Carl]

    }
    @Test
    public void test2(){
        var a = new LinkedList<String>();
        a.add("Amy");
        a.add("Carl");
        a.add("Erica");
        var b = new LinkedList<String>();
        b.add("Bob");
        b.add("Doug");
        b.add("Frances");
        b.add("Gloria");
        ListIterator<String> aIter = a.listIterator();
        Iterator<String> bIter = b.iterator();
        while(bIter.hasNext()){
            if(aIter.hasNext()){
                aIter.next();
            }
            aIter.add(bIter.next());
            System.out.println(a);
        }
        bIter = b.iterator();
        while(bIter.hasNext()){
            bIter.next();
            if(bIter.hasNext()){
                bIter.next();
                bIter.remove();
            }
        }
        System.out.println(b);
        a.removeAll(b);
        System.out.println(a);
    }
}

[Amy, Bob, Carl, Erica]
[Amy, Bob, Carl, Doug, Erica]
[Amy, Bob, Carl, Doug, Erica, Frances]
[Amy, Bob, Carl, Doug, Erica, Frances, Gloria]
[Bob, Frances]
[Amy, Carl, Doug, Erica, Gloria]

ArrayList

相比于ArrayList,Vector所有的方法都是同步的,可以安全的从两个线程访问一个Vector对象。但是ArrayList是不同步的。

装填因子

散列表中所含元素的个数和散列表大小的比值



这篇关于JavaCoreTechnology_Day10.11的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程