集合框架s

1.集合框架概述

    以前我们都是用数组来存储数据,但今天来认识一下集合框架,首先说说数组的一些明显缺陷

1.数组长度固定不变

2.可以通过.length来获取数组的长度,但无法获取其中真实的个数

3.数组采用在内存中分配连续空间的存储方式,根据下标可以找到对应的信息,但在查找的时候效率低下

2.JAVA集合框架包含的内容

接口:表示集合的抽象数据类型,CollectionListMapIterator.

实现类:最常用的实现类:ArraysListLinkedListHashMapHashSet.

算法:Java提供了对集合操作的类,Collections

2.1.Collection接口:存储一组不唯一(允许重复)、无序的对象.

2.2.Set接口继承Collection接口,存储一组唯一(不允许重复)、无序的对象

2.3.List接口继承了Collection接口,存储一组不唯一允许重复()、有序的对象(以元素插入时的顺序放置).

Map接口存储一组成对的键——值,提供Key(键)到Value(值)的映射。Map中的Key不要求有序,不允许重复,Value不要求有序,但允许重复。

Iterator接口是负责定义访问访问和遍历元素的接口。


/**
 * 测试ArrayList的add()、size()、get()方法
 * */
public class Test03 {
	public static void main(String[] args) {
		//1.创建狗狗的四个对象
		Dog ououDog=new Dog("欧欧","雪瑞多");
		Dog yayaDog=new Dog("亚亚","拉布拉多");
		Dog meimeiDog=new Dog("美美","贵宾犬");
		Dog feifeiDog=new Dog("菲菲","哈士奇");
		//2.创建List对象	ArrayList对数组进行了封装,实现了长度可变的数组
		//访问比较多的时候就用ArrayList,修改用LinkedList(实际开发中用ArrayList比较多)
		//list是可以重复的而Set是不允许重复的    接口不能new只能new他的实现类
		List<Dog> dogs=new ArrayList<Dog>();	//泛型集合
		dogs.add(ououDog);
		dogs.add(yayaDog);
		dogs.add(meimeiDog);
		dogs.add(2,feifeiDog);//添加到第二个元素位置
		//3.输出数量
		System.out.println("狗狗的数量有"+dogs.size());
		//4.通过遍历集合来显示狗狗信息
//		for (int i = 0; i < dogs.size(); i++) {
//			//向下转型需强制转换,返回的是Object类型
//			Dog dog=(Dog)dogs.get(i);
//			System.out.println(dog.getName()+"\t"+dog.getStrain());
//		}
		for (Dog dog : dogs) {
			System.out.println(dog.getName()+"\t"+dog.getStrain());
		}
		System.out.println("-----------------");
		//5.使用remove来删除*这里是有两种方式一种传的是对象或者index	细节:每次删除后再删除就是重新的集合了位置一定要注意
		dogs.remove(0);
		dogs.remove(feifeiDog);
		System.out.println("狗狗的数量有"+dogs.size());
		//6.删除通过遍历集合来显示狗狗信息
		for (int i = 0; i < dogs.size(); i++) {
			//向下转型需强制转换,返回的是Object类型
			Dog dog=(Dog)dogs.get(i);
			System.out.println(dog.getName()+"\t"+dog.getStrain());
		}
		//7.判断里面有没有这个类型	contains
		System.out.println(dogs.contains(feifeiDog));
		if(dogs.contains(yayaDog)){
			System.out.println("有");
		}else{
			System.out.println("没有");
		}
		System.out.println("--------------");
		//8.新建一个ArrayList集合赋值(这样会打乱里面元素的位置)
		List<Dog> dogs2=new ArrayList<Dog>();
		dogs2.addAll(dogs);
		for (int i = 0; i < dogs2.size(); i++) {
			Dog dog=(Dog)dogs.get(i);
			System.out.println(dog.getName()+"\t"+dog.getStrain());
		}
	}
}
                                                                       List接口中常用方法


/**
 * 测试LinkedList的多个特殊方法
 * */
public class Test04 {
	public static void main(String[] args) {
		//1.创建狗狗的四个对象
		Dog ououDog=new Dog("欧欧","雪瑞多");
		Dog yayaDog=new Dog("亚亚","拉布拉多");
		Dog meimeiDog=new Dog("美美","贵宾犬");
		Dog feifeiDog=new Dog("菲菲","哈士奇");
		//2.创建LinkedList集合对象并把多个狗狗放入其中
		LinkedList<Dog> dogs=new LinkedList<Dog>();
		dogs.add(ououDog);
		dogs.add(yayaDog);
		dogs.addLast(meimeiDog);
		dogs.addFirst(feifeiDog);
		//3.查看集合中第一条狗狗的昵称    addLast是size()长度减一
		Dog dogFrist=(Dog)dogs.getFirst();
		System.out.println("第一条狗狗"+dogFrist.getName());
		//4.查看集合中最后一条狗狗的昵称
		Dog dogLast=(Dog)dogs.getLast();
		System.out.println("第一条狗狗"+dogLast.getName());
		//5.删除集合中第一条和最后一条狗狗
		dogs.removeFirst();
		dogs.removeLast();
		//6.显示删除部分狗狗后集合中信息
		System.out.println("还有几条狗狗"+dogs.size());
		for (int i = 0; i < dogs.size(); i++) {
			//向下转型需强制转换,返回的是Object类型
			Dog dog=(Dog)dogs.get(i);
			System.out.println(dog.getName()+"\t"+dog.getStrain());
		}
	}
}
                                                                LinkedList接口中的特殊方法 
/**
 * 测试HasMap的多个方法
 * */
public class Test05 {
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		//1.使用HasMap存储国家英文简称和中文    Map是接口只能new它的实现类
		Map countries=new HashMap();
		//put方法前面的是key后面是value
		countries.put("CN", "中华人民共和国");
		countries.put("UK", "英国");
		countries.put("KR", "大韩民国");
		countries.put("JP", "日本");
		countries.put("AUS", "澳大利亚");
		//2.显示CN对应国家的中文名称  返回的是Object类型需要强转
		String country=(String)countries.get("CN");
		System.out.println("CN对应的国家是"+country);
		//3.显示集合中元素个数
		System.out.println("Map中共有"+countries.size()+"组数据");
		//4.两次判断Map是否存在FR键值  containsKey方法
		System.out.println("Map中包含FR的key吗?"+countries.containsKey("UK"));
		countries.remove("UK");
		System.out.println("Map中包含FR的key吗?"+countries.containsKey("UK"));
		//5.分别显示键集、值集和键-值对集    是全部显示
		System.out.println(countries.keySet());
		System.out.println(countries.values());
		System.out.println(countries);
		//6.清空HasMap并判断
		countries.clear(); //清空集合里的数据
		if(countries.isEmpty()){
			System.out.println("已清空Map中数据");
		}
		
	}
}
                                                                    Map的常用方法

Hashtable和HashMap的异同

Hashtable继承Dictionary类,HashMap实现了接口

Hashtable是线程安全,速度没有HashMap块,轻速度、重安全。HashMap线程是非安全的,重速度、轻安全

Hashtable不允许null值(Key和value都不允许),HashMap允许空值(Key和value都允许):开发中最好使用HashMap

3.Iterator迭代器

boolean hasNext():判断是否存在另一个可访问的元素

Object next():返回要访问的下一个元素

/**
 * 测试通过Iterator遍历HashMap
 * */
public class Test06 {
	public static void main(String[] args) {
		//1.创建狗狗的四个对象
		Dog ououDog=new Dog("欧欧","雪瑞多");
		Dog yayaDog=new Dog("亚亚","拉布拉多");
		Dog meimeiDog=new Dog("美美","贵宾犬");
		Dog feifeiDog=new Dog("菲菲","哈士奇");
		//2.创建Map集合对象并把多个狗狗对象放入其中
		Map<String, Dog> dogMap=new HashMap<String, Dog>();
		dogMap.put(ououDog.getName(), ououDog);
		dogMap.put(yayaDog.getName(), yayaDog);
		dogMap.put(meimeiDog.getName(), meimeiDog);
		dogMap.put(feifeiDog.getName(), feifeiDog);
		//3.通过迭代器依次输出集合中所有狗狗的信息
		System.out.println("使用Iterator遍历,"+"所有狗狗的信息");
		Set<String> keys=dogMap.keySet();		//取出所有key的集合
		Iterator<String> it=keys.iterator();	//获取Iterator对象
		while(it.hasNext()){
			String key=(String)it.next();//取出key
			Dog dog=(Dog)dogMap.get(key);//根据key取出对应的值
			System.out.println(key+"\t"+dog.getStrain());
		}
	}
}
public class Test061 {
/**
 * 使用Iterator遍历List
 * */
	public static void main(String[] args) {
		//创建狗狗对象
		Dog ououDog=new Dog("欧欧","雪瑞多");
		Dog yayaDog=new Dog("亚亚","拉布拉多");
		Dog meimeiDog=new Dog("美美","贵宾犬");
		Dog feifeiDog=new Dog("菲菲","哈士奇");
		//创建ArrayList集合对象并把对公狗狗放入其中
		List<Dog> dog=new ArrayList<Dog>();
		dog.add(ououDog);
		dog.add(yayaDog);
		dog.add(meimeiDog);
		dog.add(feifeiDog);
		//通过迭代器依次输出集合中所有狗狗的信息
		Iterator<Dog> it=dog.iterator();
		while(it.hasNext()){
			//声明了上面的Iterator只能装Dog类型
			Dog dogs=it.next();
			System.out.println(dogs.getName()+"\t"+dogs.getStrain());
		}
	}
}
/**
 * 基本类型转换成包装类型
 * */
public class BaoZhuangLeiXing {
	public static void main(String[] args) {
		//定义ArrayList<Object>泛型集合
		ArrayList<Object> list=new ArrayList<Object>();
		list.add(12);
		list.add(25.5);
		list.add('男');
		list.add(true);
		
	}
}
总结

1.集合是比数组更加高效率的存储数据的,可大大提高软件的开发效率

2.集合框架包含三大块内容:对外的接口(ArraysList、LinkedList、HashMap、HashSet)。

3.ArraysList和数组采用相同的存储方式,他的优点在于遍历元素和随机访问元素的效率较高。(查询较高,比LinkedList好),LinkedList采用链表方式存储方式,优点在于插入、删除元素时效率较高。(删除和插入等效率比ArraysList效率高)

4.Iterator为集合而生,专门实现集合的遍历。它隐藏各种集合实现类的内部细节提供了集合的统一编程接口。

5.Java中有八个包装类:Byte、Short、Integer、Long、Float、Double、Boolean、Character;

6.使用泛型集合可以避免,ClassCastException异常 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值