7.29笔记

一、set List

set:无序的,不可重复,不能根据索引操作

List:有序的,可重复,可以根据索引操作

有序:存储的顺序与内部真实存放的顺序保持一致

新增方法:新增了一些与索引相关的方法

jdk1.7之前:标准写法 前后的类型都需要<String>

ArrayList<String> list = new ArrayList<String>();

jdk1.7之后:后面的类型后可以省略传递类型<>

ArrayList<String> list = new ArrayList<String>();
1.void add(int index, E element)
在此列表中的指定位置插入指定元素(可选操作)。
list.add(5,"aaaa");
2.boolean add(E e)
将指定元素附加到此列表的末尾(可选操作)。
list.add("ccc");
3.boolean addAll(int index, Collection<? extends E> c)
将指定集合中的所有元素插入到此列表中的指定位置(可选操作)。
list.addAll(3,list1);
4.boolean addAll(Collection<? extends E> c)
将指定集合中的所有元素附加到此列表的末尾,按照指定集合的迭代器返回的顺序(可选操作)
list.addAll(list1);
5.int indexOf(Object o)
返回此列表中指定元素第一次出现的索引,如果此列表不包含该元素,则返回 -1。
System.*out*.println(list.indexOf("aaa"));
​
int lastIndexOf(Object o)
返回此列表中指定元素最后一次出现的索引,如果此列表不包含该元素,则返回 -1。
System.*out*.println(list.lastIndexOf("aaa"));
6.E remove(int index)
移除此列表中指定位置的元素(可选操作)。
System.*out*.println(list.remove(2));
boolean remove(Object o)
如果指定元素存在,则从该列表中删除第一次出现的指定元素(可选操作)。
System.*out*.println(list.remove("abc"));
7.E set(int index, E element)
将此列表中指定位置的元素替换为指定元素(可选操作)。
System.*out*.println(list.set(2,"xxx"));
8.List<E> subList(int fromIndex, int toIndex)
返回此列表在指定fromIndex (包括)和toIndex (不包括)之间部分的视图。
List<String> ls=list.subList(3,6);
二、ListIterator
列表迭代器:ListIterator List独有的

列表的迭代器,允许程序员在任一方向遍历列表,在迭代期间修改列表,并获取迭代器在列表中的当前位置。

1.获取列表迭代器实例

2.判断是否存在下一个元素|判断是否存在上一个元素

3.获取下一个元素|获取索引|获取上一个元素以及索引

list集合遍历方式:
1.for
for(int i=0;i< list.size();i++){
    if("灭霸".equals(list.get(i))){
        list.add("惊奇队长!!!");
    }
}
2.foreach
for(String str:list){  //java.util.ConcurrentModificationException   if("灭霸".equals(str)){
        list.add("惊奇队长!!!");
    }
}
3.iterator
Iterator<String> it = list.iterator();  //java.util.ConcurrentModificationException
while(it.hasNext()){
    if("灭霸".equals(it.next())){
        list.add("惊奇队长!!!");
    }
}
4.listIterator
ListIterator<String> it2 =  list.listIterator();
while(it2.hasNext()){
    *//System.out.println(it2.nextIndex()+"--->"+it2.next());*    if("灭霸".equals(it2.next())){
        it2.add("惊奇队长!!!");
    }
}
System.*out*.println(list);
​
while(it2.hasPrevious()){
            System.out.println(it2.previousIndex()+"--->"+it2.previous());
        }
​
        System.out.println("-------------------------------");
​
        ListIterator<String> it3 = list.listIterator(3);//从前往后会遍历3
        while(it3.hasNext()){
            System.out.println(it3.nextIndex()+"--->"+it3.next());
        }
        System.out.println("-------------------------------");
        ListIterator<String> it4= list.listIterator(3);//向前不包含3
        while(it4.hasPrevious()){
            System.out.println(it4.previousIndex()+"--->"+it4.previous());
        }
注意:

java.util.ConcurrentModificationException 当这种修改是不允许的时,检测到对象的并发修改的方法可能

会抛出此异常。 例如,通常不允许一个线程在另一个线程对其进行迭代时修改Collection。

三、List接口下的实现类:

有序的,可重复的,可以根据索引操作的

ArrayList:***

允许所有元素,包括null

1.底层结构:

数组 Object[] elementData;

2.特点

根据索引查询效率高,做增删效率低

3.应用场景

适合应用在大量做查询,少量做增删的情况下

4.初始容量

默认为10 private static final int DEFAULT_CAPACITY = 10; | 可以通过构造器指定

5.扩容机制

每次扩容原容量的 1.5倍 int newCapacity = oldCapacity + oldCapacity>>1;

通过调用Arrays.copyOf方法实现扩容+拷贝数据

6.新增方法

没有新增方法

7.遍历方式

1)for

2)foreach

3)iterator

4)listIterator

请注意,此实现不同步。

Vector :向量 了解
共性 :

1)都是List接口下的实现类,相同的特点

2)底层结构都是数组,特点相同

不同点 :

1)线程安全问题

ArrayList : 线程不安全|不同步的

Vector : 线程安全|同步的

如果不需要线程安全实现,建议使用ArrayList代替Vector 。

2)初始容量与扩容机制

初始容量 :

ArrayList与Vector : 默认底层数组容量的为10 | 可以通过构造器指定

扩容机制 :

ArrayList : 每次扩容原容量的1.5倍

Vector : 如果用户指定每次扩容的容量增量capacityIncrement,就每次原容量+capacityIncrement,

如果用户没有指定capacityIncrement,那么每次扩容原容量的2倍

int dCapacity = oldCapacity + capacityIncrement > 0 ? capacityIncrement : oldCapacity?

注意 : 当使用ArrayList存储自定义引用数据类型的对象数据的时候,要求根据所有属性值重写toString与

equals

四、LinkedList

有序的,可重复的,可以根据索引操作的

允许所有元素,包括null

1.底层结构:

双向链表

2.特点:

查询效率低,增删效率高

3.应用场景:

大量做增删少量做查询的情况

4.新增方法

新增了一些操作链表头尾的方法

5.遍历方式:

1)for

2)foreach

3)iterator

4)listIterator

5)descendingIterator() 逆序迭代

请注意,此实现不同步

五、LinkedList

1.LinkedList() 构造一个空列表

LinkedList<Double>  list=new LinkedList<>();
2.void addFirst(E e)    在此列表的开头插入指定元素
list.addFirst(3.5);
System.out.println(list);
3.void addLast(E e)     将指定元素附加到此列表的末尾。
list.addLast(5.3);
System.out.println(list);
4.boolean offerFirst(E e)       在此列表的前面插入指定的元素。list.offerFirst(3.4);
System.out.println(list);
5.boolean offerLast(E e)        在此列表的末尾插入指定的元素。list.offerLast(8.1);
System.out.println(list);
6.E getFirst()      返回此列表中的第一个元素。System.out.println(list.getFirst());
7.E getLast()       返回此列表中的最后一个元素。System.out.println(list.getLast());
7.E peekFirst()     检索但不删除此列表的第一个元素,如果此列表为空,则返回null。System.out.println(list.peekFirst());
8.E peekLast()      检索但不删除此列表的最后一个元素,如果此列表为空,则返回null
System.out.println(list.pollLast());
9.E pollFirst()     检索并删除此列表的第一个元素,如果此列表为空,则返回null
System.out.println(list.pollFirst());
10.E pollLast()     检索并删除此列表的最后一个元素,如果此列表为空,则返回null
System.out.println(list.pollLast());
11.E removeFirst()  从此列表中删除并返回第一个元素。
System.out.println(list.removeFirst());
12.boolean removeFirstOccurrence(Object o)  删除此列表中第一次出现的指定元素(从头到尾遍历列表时)。
System.out.println(list.removeFirstOccurrence(2.5));
13.E removeLast()   移除并返回此列表中的最后一个元素。System.out.println(list.removeLast());
14.boolean removeLastOccurrence(Object o)   删除此列表中指定元素的最后一次出现(从头到尾遍历列表时)。
System.out.println(list.removeLastOccurrence(2.5));
System.out.println(list);
15.逆序迭代descendingIterator()
Iterator<Double> it= list.descendingIterator();
while (it.hasNext()){
    System.out.println(it.next());
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值