标签:iterator Day10.11 Amy add import Bob JavaCoreTechnology staff
Day10
泛型程序设计
对于Java泛型的转换需要记住一下几个事实:
- 虚拟机中没有泛型,只有普通的类和方法
- 所有的类型参数都会替换为他们的限定类型
- 会合成桥方法来保持多态
- 为保持类型安全性,必要时会插入强制类型转换
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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。