1 集合类—ListNo14
集合(广义,指整个集合体系):
注意:集合中的元素都是引用数据类型,只能是引用数据类型
《虽然可以直接往集合中添加int类型的数据,但其实是先隐式地自动装箱成Integer类型再添加进集合,最后集合中存储的数据是Integer》
可以动态存放多个对象
常用的概念说明
【
“元素”-------对象,实例
“重复”------两个对象通过hashCode()、equals()相等
“有序”------元素取出的顺序与存入的顺序相同
List集合中的元素都对应一个整数型的序号记载其在集合中的位置,可以根据序号存取集合中的元素。
】
1.1 Collection
【广义一系列存储相同类型数据的类的统称
狭义Collection是一个接口,是广义集合体系中最顶层的
【
int size();
boolean isEmpty();判断此collection中是否包含元素。
booleancontains(Object obj);
booleancontainsAll(Collection c);
boolean add(Objectelement);
booleanaddAll(Collection c);将指定collection中的所有元素添加到此collection
booleanremove(Object element);
booleanremoveAll(Collection c);
void clear();
booleanretainAll(Collection c);.在调用的对象中只保留交集.如果操作成功,返回true
Iteratoriterator();返回在此collection的元素上进行迭代的迭代器。
Object[] toArray();把此collection转成数组。
iterator()
】
List接口有序(元素添加进去的顺序会保持),元素可重复
Set接口】无序(有例外),元素不可重复
Collection集合(狭义,接口):存放一组相同类型数据的数据结构,其中的元素类型都是引用类型(表面上看可以直接放入基本数据类型,其实是自动装箱在起作用)
List继承Collection的一个接口,其中的元素有序,可重复
【List集合中的元素都对应一个整数型的序号记载其在集合中的位置,可以根据序号存取集合中的元素】
Set继承Collection的一个接口,其中的元素不可重复
1.2 ArrayList:
【以数组(线性表)作为实现形式的List,是List的实现类
ArrayList是使用数组结构实现的List集合
}优点:
◦对于使用索引取出元素有较好的效率(随机访问)
–它使用索引来快速定位对象
}缺点:
◦元素做删除或插入速度较慢
–因为使用了数组,需要移动后面的元素以调整索引顺序。
】
add(E e)往其中添加元素,添加到最后(向ArrayList中添加元素,添加到最后)《方法重载》
size()获取元素的数量
get(int index)获取下标为index的指定位置的元素,下标范围必须是0到长度-1,返回要取得元素
remove(int index)删除指定下标位置的元素,被删除元素后面的元素都会填补上来,长度也会-1 (存在方法重载)
add(int index,E e)在index位置插入元素e,原来index位置以及后面的所有元素都会顺序后移一格
set(int index,E e)将index位置的元素替换为新的元素e,集合长度不会变
isEmpty()判断是否为空
addAll(Collection c)将参数中的集合作为子集合添加到另一个集合中去
1.3 迭代器
可以用来遍历集合
IteratorIterator () 返回当前集合的迭代器
//一个迭代器刚产生时,它的游标指向第一个元素的前一个位置,
boolean hasNext()判断有没有下一个元素
E next()游标跳到下一个元素,并将这个元素返回出去
Remove()删除最近一次next返回的那个元素(每次next())后只能调用一次
List接口中有很多抽象方法让ArrayList实现了,可以说List中的方法基本和ArrayList中的方法一致。
Collection接口中没有任何和下标相关的方法,因为要照顾到Set这一分支(Set是无序的,下标对其没有意义)
注意:在ArrayList中实际存放的是封装类
1.4 增强型for循环
for(每次遍历到的元素的引用:集合或数组对象对每次遍历到的元素的引用进行操作)
1.5 LinkedList:
【以链表作为实现形式的List,也是List的实现类
主要方法和ArrayList差不多
链表的特征是插入快,但访问某一下标的元素慢
线性表的特征是插入慢,但访问某一下标的元素快
LinkedList新增了一些插入、删除的方法。
LinkedList是使用双向链表实现的集合。
【优点:】
◦《对频繁的插入或删除元素有较好的效率
◦适合实现栈(Stack)和队列(Queue)
》
】
用法和ArrayList类似
以上两者的实现原理不同,AarrayList是用数组实现的,访问、遍历非常快,但插入元素比较慢;而LinkenList使用链表实现,插入元素比较快,但访问变量慢
add(int index,元素)往指定位置添加元素,或者说在某位置插入元素,原来这个位置的数组向后推
remove(int index)删除指定下标index对应的元素,删除后面的元素会自动填充上来
iterator()获取一个迭代器对象Iterator,可以用这个对象来遍历这个集合
Iterator 方法:
boolean hasNext()是否有下一个元素
next()跳到下一个元素,并且返回这个元素
remove()删除最近一次返回的元素,一次next()对应一 次remove()
适合边遍历边删除
void addFirst(E e)将指定元素插入此双端队列的开头。
void addLast(E e)将指定元素添加到此列表的结尾。等效于add(E e)
E getFirst()返回此列表的第一个元素,等效于element(),只看不动.
E getLast()返回此列表的最后一个元素。只看不动.
1.6 泛型在集合中的使用:
【在集合的声明类型和构造方法后加上<元素类型>
ArrayList l =new ArrayList();
这样的泛型声明表示以后这个集合只能添加这种类型(及子类)的元素,
取出来的也只会是这种类型的元素
】
如果不声明,默认隐式Object
可以限制集合汇总存放的元素类型
书写方式:
集合类名<元素类型>这样就能将集合的内容限制成<>里的类型了
在add的时候只能放泛型规定的类型及其子类
在get(int index)的时候也只能拿出泛型规定的类型
如果放进去的是泛型类型的子类,那么拿出来时是泛型的类型
【
优点:
简化集合的使用,无需强制类型转换
增强代码的可读性和稳定性,别的类型的对象无法存入
】
增强型for循环:
for(元素类型 元素引用:集合或数组){
循环执行的语句;
}
在循环执行的语句中,可以用元素引用去操作每次遍历到的元素
增强型for循环没有下标信息,需要根据下标进行判断或操作的情况下,还是要使用普通的foe循环
1.7 Stack栈
,也是List的实现类(Stack是Vector的子类)
empty()---判断栈是否为空
peek()
pop()-------弹出栈顶元素返回
push(E item)---压栈
search(Object o)
Vector向量,和ArrayList差不多,但是是线程安全的
1.8 代码片段
(1栈Satck:先进后出,压栈与弹栈)
【
Stacks = new Stack<>();
//压栈
s.push("Android");
s.push("Java");
s.push("1000phone");
while (!s.isEmpty()) {
System.out.println(s.pop());//弹栈打印
}
】
(2链表集合:LinkedList)
【
LinkedList l = newLinkedList();
l.add("hollo1");
l.add("hollo2");
for(inti=0;i
System.out.println(l.get(i));
}
】
(3:数组集合ArrayList)
【
根据索引获取指定元素:
for (int i = l.size() - 1; i >= 0; i--) {
System.out.println(l.get(i));
}
l.addAll(other); //将一个集合作为子集合添加到另一个集合中去
增强for循环:
for(String s:l){
System.out.println(s);
}
删除集合元素:可根据索引或元素对象
l.remove(1);//删除下标为1,也就是第二个元素
l.remove("java");//删除参数中的对象元素
在集合中迭代器的使用:Iterator
//使用iterator()方法返回一个迭代器对象
Iterator iter =l.iterator();
while(iter.hasNext()){ //当有下一个元素时
//就跳到下一个并打印出来
System.out.println(iter.next());
}
用迭代器删除集合元素:
Iterator iter = l.iterator();
while(iter.hasNext()) {
Strings = iter.next();
if(s.matches("[0-9]+")) {
iter.remove();
}
}
】