ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaCoreTechnology_Day10.11

2022-06-07 21:02:05  阅读:156  来源: 互联网

标签:iterator Day10.11 Amy add import Bob JavaCoreTechnology staff


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是不同步的。

装填因子

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

标签:iterator,Day10.11,Amy,add,import,Bob,JavaCoreTechnology,staff
来源: https://www.cnblogs.com/poteitoutou/p/16353380.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有