集合框架(集合只能存放对象---过程有有其他类型如int底层自动转换成 对象)
集合框架:理解上来看集合框架为增强型数组,功能与数组相同
在不知道程序运行时会需要多少对象,或者是需要更复杂方式存储对象
1 List
(无序,不可重复)
List特点为: 1有序 2可重复
1)ArrayList:便于数组遍历 实现类长度可变的数组,按照索引使用(数据列表)
此为实现类父类型为List 所以可以使用接口做类型子类实例化
List list=new ArrayList();
在List ,ArratList中包含以下方法
①添加方法 void add(对象);
boolean add(int index,对象);
注:
②获取列表元素个数(数组中用length)
int size();
③获取元素 Object get(int index);
注:方法中使用填入下表 get(下表);返回的为集合中对象
④判断表中是否有指定元素 boolean contains(Object ob);
⑤删除列表中元素 boolean remove(Object ob);
Object remove(int index);
⑥清空所有数据 void clear()
⑦判断集合是否| 没有 |元素 boolean isEmptry();
注:第二种删除为按照下标删除返回值为删除元素
实现遍历:
方法1:使用for循环实现遍历
for(int i=0;i<lis.size();i++){
//使用对象.get(下标),获得集合元素
Object obj=lis.get(i);
//此处运用到强制转换
ArrayList1_2 Q=(ArrayList1_2)obj;
//强制转换成需要的类型在用其类 . 出方法
Q.show();
}
方法2:使用增强for(foreach)
for(Object obj:lis){
ArrayList1_2 tt=(ArrayList1_2)obj;
tt.show();
}
方法3:使用迭代器iterator();
Iterator ite=lis.iterator();
while(ite.hasNext()){//查询是否有下一个
Object obj=ite.next();//返回下一个元素
ArrayList1_2 tt=(ArrayList1_2)obj;
tt.show();
}
2)LinkedList:便于对集合的修改,操作(链式列表)
因为LinkedList内有特定的方法所以不能使用接口做类型子类实例化
LinkedList list=new LinkedList();
特有方法为:
①在列表首部添加元素
void addFirst(Object ob);
在列表尾部添加元素
void addLast(Object ob);
②返回列表中的第一个元素
Object getFirst();
返回列表中的最后一个元素
Object getLat();
③删除列表中第一个元素
Object removeFirst();
删除列表中最后一个元素
Object removeLast();
2 Set
①添加方法 void add(对象);
②获取列表元素个数
int size();
③判断集合中是否没有元素 boolean isEmpty();
④判断表中是否有指定元 boolean contains(Object ob);
⑤删除列表中元素 boolean remove(Object ob);
⑥清空所有数据 void clear()
实现遍历:由于Set接口属性为无序,唯一;没有get(index);方法不能使用for循环只能有两种遍历方式
方式1:使用foreach
for (Object obj : set) {
ArrayList1_2 hash=(ArrayList1_2)obj;
hash.show();
}
方式2:使用迭代器
Iterator it=set.iterator();
while(it.hasNext()){//判断是否有下个值
ArrayList1_2 Array=(ArrayList1_2)it.next();//.next获取下一个元素
Array.show();
}
3 Map (无序,不可重复) Key-Value
HashMap:使用查看成对元素
方法:
①添加方法 Map是按键值存在的
Object put(Object Key,Object Value);
⑦清空所有数据
void clear()
⑧判断是否不存在键-值映射关系for (Object obj : map.keySet()) {//想法1:遍历map中的key值
String ss=(String)obj;
System.out.println(ss);
//map的键值关系没有办法输出全部元素,所以使用分步遍历
System.out.println(map.get(obj));//利用get方法输出value,对象类型是需要强制转换
}
for (Object obj : map.values()) { //直接获取values
String ss=(String)obj;
System.out.println(ss);
}
方法2
使用遍历器
Set set=map.keySet();//返回值类型为Set 因为迭代器是Collection接口的方法
//hasNext() next()是Iterator方法
Iterator it=set.iterator();
while(it.hasNext()){
Object ob=it.next();
String str=(String)ob;
System.out.println(str);
}
Map <String,BookArrayList1>map=new HashMap<String,BookArrayList1>();
//Map中键-值添加前 为String类型 后为对象类型
map.put(p1.getName(), p1);
map.put(p2.getName(), p2);
//因为键 后续需要转换成String类型 在此处声明
Set<String> name=map.keySet();
map.get(name);
System.out.println(map.get(name));
System.out.println("测试结果"+map.size());
for (String obj : name) { //此处应为Object类型 做泛型后可免强制类型转换
System.out.println(obj);
System.out.println(map.get(obj));
}
Set <String>p=map.keySet();//遍历需要转换为String类型在此处声明
Iterator <String>it=p.iterator();
while(it.hasNext()){
String str=it.next();//避免了强制转换 原:Object obj=it.next(); 再 进行转换输出
BookArrayList1 bo=map.get(str);
bo.show();
}