今日学习时间4个小时,晚上出去玩,明天图书馆只有早上开门,明天得早起去图书馆学习。今天学习效率不太行。
Day16
iterator
/**
* iterator就是个迭代器,不装东西的。
* 集合对象每次调用iterator()方法都得到一个全新的迭代器对象。
* 默认游标都在集合的第一个元素之前。
* 9.iterator();返回Iterator接口的实例,用于遍历集合元素,放在IteratorTest.java中。
* 集合元素的遍历操作,使用迭代器Iterator接口
* 迭代器模式就是为容器而生。
* 内部的方法,hasNext()和next()方法
* hasNext()判断是否还有下一个元素
* next()①指针下移,②将下移以后的集合位置的元素返回。
*/
while (iterator.hasNext()){
System.out.println(iterator.next());
foreach循环
/**
* foreach循环,用于遍历集合、数组
*/
public class forEachTest {
@Test
public void test(){
Collection coll =new ArrayList();
coll.add(123);
coll.add(456);
coll.add(new Person("Jerry",20));
coll.add("tom");
coll.add(false);
System.out.println(coll);
//for(集合中元素类型 局部变量 :集合对象)
for(Object obj: coll){
System.out.println(obj);
}
}
@Test
public void test1(){
//for(数组中元素类型 局部变量 :数组)
int[] arr =new int[]{1,2,3,4,5,6,7};
for(int i:arr){
System.out.println(i);
}
}
@Test
public void test2(){
String[] arr =new String[]{"mm","MM","妹妹"};
// //普通for赋值
// for (int i =0;i<arr.length;i++){
// arr[i] ="哥哥";//改变了原有数组。
// }
//增强for循环。
for (String s:arr){
s ="QQ";//重新赋值了s,没有改变原有数组
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
今日份代码:
package com.sorrymaker.CollectionTest;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
/**
* -Collection接口:单列集合,用来存储一个一个的对象 I
* ---List接口:存储有序的、可重复的数据----->动态数组,替换原有打的数组
* ------ArrayList、作为List接口的主要实现类,线程不安全,效率高,底层使用Object[] elementData存储
* ------LinkedList、对于频繁的插入、删除操作,使用此类效率比ArrayList高,底层使用双向链表存储
* ------Vector:作为List接口的古老实现类,线程安全,效率低,底层使用Object[] elementData存储
*
* LinkedList、ArrayList、Vector三者的异同
* ---同:三个类都是实现了List接口,存储数据的特点相同:存储有序的、可重复的数据。
*
* 小结:Jdk7中的ArrayList的对象的创建类似于单例的饿汉式,
* JDK8中的ArrayList的对象创建类似于单例的懒汉式,延迟了数组的创建,节省内存。
*
* LinkedList源码分析:
* LinkedList list = new LinkedList();实例化,内部声明了Node类型的first和last属性,默认值为null。
* link.add(123);将123封装到Node中,创建了Node对象
* 其中 Node定义为:
* private static class Node<E> {
* E item;//中
* Node<E> next;//后
* Node<E> prev;//前
* //双向链条。
* Node(Node<E> prev, E element, Node<E> next) {
* this.item = element;
* this.next = next;
* this.prev = prev;
* }
* }
*/
public class ListTest {
/**
* List接口的常用方法
*
* 总结:常用方法
* 增:add(Object obj)
* 删: remove(int index)/remove(Object obj)
* 改: set(int index, Object ele)
* 查: get(int index)
* 插: add(int index, Object ele)
* 长度:size()
* 遍历: Iterator 迭代器方式
* 增强for循环
* 普通的循环
*/
@Test
public void test2(){
ArrayList list = new ArrayList();
list.add(123);
list.add(456);
list.add("Aa");
//方式一,使用迭代器Iterator遍历
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));
}
}
@Test
public void test(){
ArrayList list = new ArrayList();
list.add(123);
list.add(456);
list.add("Aa");
list.add(new Person("tom",123));
list.add(456);
System.out.println(list);
//void add(int index,Object ele):在index位置插入ele元素
list.add(1,"bb");
System.out.println(list);
//boolean addALL(int index,Collction eles);从index位置开始将eles中的所有元素添加到list当中。
List list1 = Arrays.asList(1,2,3);
list.addAll(list1);
System.out.println(list.size());//9
//Object get(int index):获取指定index位置的元素
System.out.println(list.get(1));
//int indexOf(Object obj)返回obj在集合中首次出现的位置,如果不存在返回-1
System.out.println(list.indexOf("bb"));
//int lastIndexOf(Object obj)返回obj在集合中末次出现的位置,如果不存在返回-1
System.out.println(list.lastIndexOf(456));
//Object remove(int index)移除指定index位置的元素,并返回此元素
Object obj = list.remove(1);//按照索引删
System.out.println(obj);
System.out.println(list);
//Object set(int index ,Object ele)设置指定index位置的元素为ele
list.set(1,"CC");
System.out.println(list);
//List subList(int fromIndex, int toIndex):返回从fromIndex到toIndex位置的左闭有开区间的子集合
List sublist = list.subList(2, 4);
System.out.println(sublist);//返回值
System.out.println(list);//本身没变
}
}
加油OVO