集合框架:
集合框架的接口:
Collection:接口存储一组不唯一,无序的对象(数据可重复)
List:接口存储一组不唯一,有序(插入顺序)的对象(按照插入顺序提取数据)
Set:接口存储一组不唯一,无序的对象(无索引下标)
Map:接口存储一组键值对象,提供key(健)到value(值)的映射(无索引下标)
键 |
值 |
使用集合框架的原因:
java集合框架包含的内容:
集合框架包含的种类:list ,set ,map
集合框架包含哪两种:collection ,map
list, map继承于collection
list接口的实现类:ArrayList,LinkedList
ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高。
实例1:
实例2:随机点名
package com.jredu.oop.ch04;
import java.util.ArrayList;
import java.util.List;
/**
* 集合框架位于java.util包下
* 集合List:ArrayList
* List:有序,不唯一
* @author 小花
*
*/
public class Ch01 {
/**
* ArrayList:内部采用了可变长度的数组,分配的是连续的空间
* 特点:遍历元素(从第一个到最后一个)以及随机访问元素(随机查看某一个)效率高
*
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//多态
//左边:接口 右边:实现类
List list = new ArrayList<>();
//接口定义的方法
//作用:在List中追加一条数据
list.add(1);
list.add("ztt");
list.add(true);
list.add('a');
//获取访问某个数据
//get()传的值是下标
System.out.println(list.get(0));//打印结果:1
System.out.println(list.get(1));//打印结果:ztt
System.out.println(list.get(2));//打印结果:true
System.out.println(list);//打印结果:[1, ztt, true,a]
//ArrayList中重写了toString方法
System.out.println(list.toString());//打印结果:[1, ztt, true,a]
//list.add,在指定下标位置插入元素,下标位置必须介于0到个数之间
list.add(1, "zn");
System.out.println(list);//打印结果:[1, zn, ztt, true, a]
//size方法:获取list的个数
System.out.println("list元素的个数是:"+list.size());//打印结果:list元素的个数是:5
System.out.println(list.get(2));//打印结果:ztt
//remove:通过下标删除元素,返回被删除的元素
System.out.println("是否删除成功:"+list.remove(2));//打印结果:是否删除成功:ztt
System.out.println(list);//打印结果:[1, zn, true, a]
//remove:通过传入具体的元素删除元素,返回删除结果
System.out.println("是否删除成功:"+list.remove(true));//打印结果:是否删除成功:true
System.out.println(list);
System.out.println("是否删除成功:"+list.remove((Character)'a'));
System.out.println(list);
System.out.println("list元素的个数是:"+list.size());//list元素的个数是:3
System.out.println(list.get(0));
System.out.println(list);
//list.contains判断是否存在某个元素
System.out.println(list.contains("zn"));//打印结果:true
System.out.println(list.contains(5));//打印结果:false
}
}
package com.jredu.oop.ch04;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Ch03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//Set本身的元素没有下标,但因为set添加的元素添加到了集合里,所以才具有了下标
Set set =new HashSet<>();
set.add(5);
List list2=new ArrayList<>();
list2.add(1);
list2.add(1);
list2.add(2);
list2.add(3);
List list=new ArrayList<>();
//addAll
//向集合当中添加一个集合
list.addAll(list2);
System.out.println(list);
list.addAll(set);
System.out.println(list);
//isEmpty判断集合是否为空true/false
System.out.println(list.isEmpty());
//判断一个集合是否为空
if(list!=null&&!list.isEmpty()){
}
/* //清空数据,但保留了对象,重置list
list.clear();
System.out.println(list);*/
//删除了对象
/*list=null;
System.out.println(list);*/
//indexOf返回元素第一次出现位置对应的下标
System.out.println( list.indexOf(1));
//lastIndexOf返回元素最后一次出现位置对应的下标
System.out.println( list.lastIndexOf(1));
//removeAll向集合当中删除另一个集合所包含的元素
list.removeAll(list2);
System.out.println(list);
//数组和List之间的相互转换
//list.toArray可以把集合转换成数组
Object[] arry=list.toArray();//arry=list.toArray()
System.out.println(arry);//数组直接打印的结果是一串地址
System.out.println(Arrays.toString(arry));
//Arrays.asList数组转集合
List list3=Arrays.asList(arry);
System.out.println(list3);
}
}
LinkedList采用链表存储方式。插入、删除元素时效率比较高
迭代器Iterator
遍历集合的方法:
1.通过for循环和get()方法配合实现遍历
2.通过迭代器Iterator实现遍历
所有集合的接口和类都没有提供相应的遍历方法,而是Iterator实现集合遍历。
package com.jredu.oop.ch04;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Ch04 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
//遍历、循环、迭代本质上差不多
for (int i = 0; i < list.size(); i++) {
//int包装类
int j=(int) list.get(i);
System.out.println(j);
}
//迭代器Iterator
//1.获取迭代器
Iterator inter=list.iterator();
//2.通过循环迭代
//hasNext判断是否存在下一个元素
while(inter.hasNext()){
//next实现迭代
//Object强转int
//Object-->Integer-->int
int j=(int) inter.next();
System.out.println(j);
}
}
}
实例:
package com.jredu.oop.ch04;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Dog {
private String type;
private String name;
public Dog(String type, String name) {
super();
this.type = type;
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
List list=new ArrayList<>();
Dog dog1=new Dog("博美", "1");
Dog dog2=new Dog("哈士奇", "2");
Dog dog3=new Dog("中华田园犬", "3");
Dog dog4=new Dog("边牧犬", "4");
Dog dog5=new Dog("蝴蝶犬", "5");
list.add(dog1);
list.add(dog2);
list.add(dog3);
list.add(dog5);
Iterator integer =list.iterator();
while(integer.hasNext()){
//每次循环只调用一边next方法
//next每调用一次就获取下一条
Dog dog=(Dog) integer.next();
System.out.println(dog.getType()+dog.getName());
}
}
}