【1】集合的由来?
面向对象语音对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,java就提供了集合类。
【2】集合和数组的区别?
A:长度区别:数组长度是固定的,集合的长度是可变的
B:存储类型的区别:数组可以存储基本数据类型也可以存储引用数据类型,集合可以存储引用数据类型
C:内容区别:数组只能存储同种数据类型的元素,集合可以存储不同类型的元素
【3】集合继承体系图
【4】Collection的功能描述
A:添加功能:
boolean add(Object obj):添加一个元素
boolean addAll(Collection c):添加一个集合的元素(将一个集合中的所有元素添加进集合)
import java.util.ArrayList;
import java.util.Collection;
public class demo1 {
public static void main(String[] args) {
Collection collection=new ArrayList();
((ArrayList) collection).add("111");
((ArrayList) collection).add("222");
((ArrayList) collection).add("333");
((ArrayList) collection).add("444");
System.out.println(collection);
Collection collection1=new ArrayList();;
((ArrayList) collection1).add("苏东坡");
((ArrayList) collection1).add("白居易");
((ArrayList) collection1).add("穆桂英");
((ArrayList) collection1).add("夏牧子");
System.out.println(collection1);
boolean b=((ArrayList) collection).addAll(collection1);
System.out.println(b);
}
}
结果截屏如下:
B:删除集合:
void clear():移除所有元素
boolean remove(Object obj):移除一个元素
boolean removeAll(Collection c):移除一个集合的元素(移除一个以上返回true)删除的元素是两个集合的交集,如果没有删除元素就返回false
import java.util.ArrayList;
import java.util.Collection;
public class demo1 {
public static void main(String[] args) {
Collection collection=new ArrayList();
((ArrayList) collection).add("111");
((ArrayList) collection).add("222");
((ArrayList) collection).add("333");
((ArrayList) collection).add("444");
collection.remove("111");
System.out.println(collection);
Collection collection1=new ArrayList();;
((ArrayList) collection1).add("苏东坡");
((ArrayList) collection1).add("白居易");
((ArrayList) collection1).add("穆桂英");
((ArrayList) collection1).add("夏牧子");
System.out.println(collection1);
boolean b=((ArrayList) collection1).addAll(collection);
System.out.println(collection1);
collection1.removeAll(collection);
System.out.println(collection1);
System.out.println(b);
collection1.clear();
System.out.println(collection1);
}
}
结果截屏如下:
C:判断功能:
boolean contains(Object obj):判断集合中是否包含指定的元素
boolean containsSll(Collection c):判断集合中是否包含指定集合的所有元素,包含则返回true
import java.util.ArrayList;
import java.util.Collection;
public class demo1 {
public static void main(String[] args) {
Collection collection=new ArrayList();
((ArrayList) collection).add("111");
((ArrayList) collection).add("222");
((ArrayList) collection).add("333");
((ArrayList) collection).add("444");
Collection collection1=new ArrayList();;
((ArrayList) collection1).add("苏东坡");
((ArrayList) collection1).add("白居易");
((ArrayList) collection1).add("穆桂英");
((ArrayList) collection1).add("夏牧子");
boolean b=collection.contains("000");
System.out.println(b);
boolean b1=collection.contains("111");
System.out.println(b1);
boolean b2=collection1.containsAll(collection);
System.out.println(b2);
((ArrayList) collection1).addAll(collection);
System.out.println(collection1);
boolean b3=collection1.containsAll(collection);
System.out.println(b3);
}
}
D:获取功能:
Iterator<E>iterator()重点重点重点
A:迭代器原理:每个集合都有内部类来实现Iterator接口,Iterator通过获取内部类的对象即迭代器对象,来调用next()方法或者hasnext()方法。
B:迭代器源码解析:
Iterator iterator=list.iterator();//获取迭代器对象
while(iterator.hasNext()){
Object obj=iterator.next();//迭代器对象调方法
System.out.println(obj);
}
C:用迭代器的方式遍历集合
E:长度功能:
int size():元素的个数【实例代码如下】
F:交集功能:
boolean retainAll(Collection c):获取两个集合的交集元素【实例代码如下】
G:集合转数组:Object[] toArray()其实就是依次获取集合中的每个元素【实例代码如下】
以上EFG的例子都在这个代码里实现:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class demo1 {
public static void main(String[] args) {
Collection collection=new ArrayList();
((ArrayList) collection).add("111");
((ArrayList) collection).add("222");
((ArrayList) collection).add("333");
((ArrayList) collection).add("444");
Collection collection1=new ArrayList();;
((ArrayList) collection1).add("苏东坡");
((ArrayList) collection1).add("白居易");
((ArrayList) collection1).add("穆桂英");
((ArrayList) collection1).add("夏牧子");
boolean b=collection.contains("000");
System.out.println(b);
boolean b1=collection.contains("111");
System.out.println(b1);
boolean b2=collection1.containsAll(collection);
System.out.println(b2);
((ArrayList) collection1).addAll(collection);
System.out.println(collection1);
boolean b3=collection1.containsAll(collection);
System.out.println(b3);
System.out.println(collection.size());
boolean b4=collection1.retainAll(collection1);//获取两个集合的交集元素
System.out.println(b4);//没有共同元素,返回false
Object[] objects=collection1.toArray();
System.out.println(collection.size());
System.out.println(Arrays.toString(objects));
}
}
【5】附加题1:数组有没有length()方法?字符串有没有length()方法?集合有没有length()方法?
数组是length属性,字符串有length()方法,集合用size()方法。
【6】List集合的特点功能:
List集合特点:元素有序,每个元素都有索引,允许存储重复元素
void add(int index,E element):在指定的索引处添加元素
E remove(int index):移除指定索引处的元素
E get(index):获取指定索引处的元素
E set(int index,E element);更改指定索引处的元素,返回的是被替换的元素
特有功能演示:
public class Listdemo {
public static void main(String[] args) {
List list=new ArrayList();
list.add("333");
list.add("345");
list.add("321");
list.add(2,"222");//给索引2的后面添加“222”元素
System.out.println(list);
list.remove(3);//移除索引3的元素
System.out.println(list);
System.out.println(list.get(1));//返回索引为1的元素
list.set(0,0);
System.out.println(list);
}
}
结果如下:
【7】List集合的遍历功能
A:通过for循环 size(),get()方法结合使用遍历
B:ListIterator继承自Iterator 使用它的迭代器
C:使用List对象的Iterator
package Collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class Listdemo2 {
public static void main(String[] args) {
List list=new ArrayList();
list.add(111);
list.add(222);
list.add(333);
list.add(444);
//遍历集合
//方式1
Iterator integer=list.iterator();
while(integer.hasNext()){
Object obj=integer.next();
System.out.println(obj);
}
System.out.println("------------------");
//方式2
ListIterator listIterator=list.listIterator();
while(listIterator.hasNext()){
Object obj=listIterator.next();
System.out.println(obj);
}
System.out.println("--------------------");
//方式3
for (int i = 0; i <list.size() ; i++) {
Object obj=list.get(i);
System.out.println(obj);
}
}
}
【8】Listerator的特有功能
ListIterator继承自Iterator 可以使用Iterator中的使用方法
A:boolean hasPrevious():是否存在前一个元素
B:E privious():返回列表的前一个元素
这两种方式可以实现反向遍历,但是要注意,要完成反向遍历之前,要先进行正向遍历,这样指针才能指到最后
如果直接反向遍历是没有效果的,因为指针默认位置就在最前面,它的前面没有元素
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ListIterator的特有功能 {
public static void main(String[] args) {
List list=new ArrayList();
list.add(111);
list.add(222);
list.add(333);
list.add(444);
//正向遍历
ListIterator listIterator=list.listIterator();
while(listIterator.hasNext()){
Object obj=listIterator.next();
System.out.println(obj);
}
//逆向遍历
System.out.println("------------------------------");
ListIterator listIterator1=list.listIterator();
while(listIterator.hasPrevious()){
Object obj=listIterator.previous();
System.out.println(obj);
}
}
}
【9】并发修改异常产生的原因及解决方案
举例:
package Collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CME {
public static void main(String[] args) {
// 需求:我有一个集合,请问,我想判断里面有没有"world"这个元素
// 如果有,我就添加一个"javaee"元素,请写代码实现。
List s=new ArrayList();
s.add("hello");
s.add("world");
s.add("java");
s.add("SE");
Iterator integer=s.iterator();
while(integer.hasNext()){
Object obj=integer.next();
String str=(String)obj;
if(str.equals("world"))
interger.add("javaee");
}
System.out.println(s);
}
}
显示并发修改异常
原因:我们的迭代依赖集合,当我们往集合中添加好了元素之后,获取迭代器,此时迭代器已经知道了集合中元素的个数,这个时候你又想给集合中添加元素,迭代器当然不会同意的,直接给你报错
package Collection;
import java.util.*;
public class CME {
public static void main(String[] args) {
// 需求:我有一个集合,请问,我想判断里面有没有"world"这个元素
// 如果有,我就添加一个"javaee"元素,请写代码实现。
List s=new ArrayList();
s.add("hello");
s.add("world");
s.add("java");
s.add("SE");
ListIterator listIterator1=s.listIterator();
while(listIterator1.hasNext()){
Object obj=listIterator1.next();
String str=(String)obj;
if(str.equals("world"))
listIterator1.add("javaee");
}
System.out.println(s);
}
}
解决方案:我们用ListIterator迭代器遍历,用迭代器自带的add方法添加元素,就不会报错
【10】数据结构之栈和队列
A:数据结构:数据结构其实就是存储数据的格式
B:分类:栈,队列,数组,链表,树,哈希表
C:栈特点:先进后出
D:队列特点:先进先出
【11】数据结构之数组和链表
A:数组特点:查询快,增删慢
B:链表特点:查询慢,增删快
【12】List的三个子类的特点:
A:ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高
B:Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低
C:LinkedList:底层数据结构是链表,查询慢,增删快,线程不安全,效率高
最后
以上就是感性板栗最近收集整理的关于Java学习之集合框架【1】的全部内容,更多相关Java学习之集合框架【1】内容请搜索靠谱客的其他文章。
发表评论 取消回复