泛型集合

数组

什么情况下使用数组?数组有什么局限?

数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型)。
如何使用集合
JAVA集合可以存储和操作数目不固定的一组数据。

集合

什么情况下使用集合?

若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。

使用相应的toArray()和Arrays.asList()方法可以互相转换。

如何使用集合

Java集合框架位于java.util包中,提供了一套性能优良、使用方便的接口和类

Java集合框架共有三大类接口: List、Set、Map
在这里插入图片描述List 接口存储一组不唯一,有序(插入顺序)的对象。

ArrayList类实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高。
在这里插入图片描述LinkedList类采用链表存储方式。插入、删除元素时效率比较高。
在这里插入图片描述

ArrayList常用方法

在这里插入图片描述

案例:新闻标题保存
package _List;

import java.util.ArrayList;
import java.util.List;

public class NewList {

	private int id;
	private String title;

	public NewList(int id, String title) {
		super();
		this.id = id;
		this.title = title;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		NewList newSport = new NewList(1, "新闻");
		NewList newMusic = new NewList(2, "音乐");
		NewList newHistory = new NewList(3, "历史");
		List newList = new ArrayList();
		newList.add(newSport);
		newList.add(newMusic);
		newList.add(newHistory);
		newList.add(1000);// 1.类型不安全
		for (Object object : newList) {
			NewList news = (_List.NewList) object;// 2.类型强制转换
			System.out.println(news.getId() + ":" + news.getTitle());
			
		}
		// 3.访问元素使用下标数字,可读性差
		System.out.println(((NewList) newList.get(1)).getTitle());
	}

}

由上面案例可知
缺点:
1.类型不安全
2.类型强制转换
3.访问元素使用下标数字,可读性差

优点: 数量可变

泛型

什么是泛型?

将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性。

本质是参数化类型。

案例:创建泛型类
package _List;

/*
 * 泛型类
 */
public class MyArray<E> {
	private E element;

	public E getElement() {
		return element;
	}

	public void setElement(E element) {
		this.element = element;
	}

	public static void main(String[] args) {
		MyArray<String> myString = new MyArray<String>();
		myString.setElement("hello world!");

		MyArray<Integer> myInteger = new MyArray<Integer>();
		myInteger.setElement(120);

		MyArray<Double> myDouble = new MyArray<Double>();
		myDouble.setElement(1000d);

		System.out.println(myString.getElement());
		System.out.println(myInteger.getElement());
		System.out.println(myDouble.getElement());
	}
}


不需要插件多个类来保存不同类型的数据,而且类型安全。

泛型集合

为什么要使用泛型集合?

泛型集合可以约束集合内的元素类型;典型泛型集合ArrayList,HashMap<K,V>;、<K,V>表示该泛型集合中的元素类型。泛型集合中的数据不再转换为Object。

使用泛型集合既实现了数据安全,又提高了效率,不需要进行类型转换。

案例:创建泛型集合存储数据
package _List;

import java.util.ArrayList;
import java.util.List;

public class NewList {

	private int id;
	private String title;

	public NewList(int id, String title) {
		super();
		this.id = id;
		this.title = title;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public static void main(String[] args) {
		NewList newSport = new NewList(1, "新闻");
		NewList newMusic = new NewList(2, "音乐");
		NewList newHistory = new NewList(3, "历史");
		// 实例化泛型集合
		List<NewList> newList = new ArrayList<NewList>();// **重点内容
		newList.add(newSport);
		newList.add(newMusic);
		newList.add(newHistory);
		// 类型安全:newList.add(1000);
		for (NewList list : newList) { // 无需强制转换,提高效率
			System.out.println(list.getId() + ":" + list.getTitle());
		}
	}
}

LinkedList常用方法

在这里插入图片描述

ArrayList与LinkedList对比

ArrayList:遍历元素和随机访问元素的效率比较高;插入、删除等操作频繁时性能低下。

LinkedList:插入、删除元素时效率较高;查找效率较低。

Set接口

Set接口存储一组唯一,无序的对象;HashSet 是Set接口常用的实现类,HashSet允许集合元素值为null。操作数据的方法与List类似,Set接口不存在get()方法。

示例:

HashSet newsTitleSet = new HashSet();

NewTitle car = new NewTitle(1, “汽车”, “管理员”);

//增加元素

newsTitleSet.add(car);

//遍历集合

for(Object obj :newsTitleList){

NewTitle title=(NewTitle)obj;

System.out.println(title.getTitleName());}

HashMap

HashMap是Map接口最常见的实现类,存储一组成对的键-值对象,提供key(键)到value(值)的映射,通过key来索引。

key不允许重复,value允许重复。添加的对象将转换为Object类型。

HashMap如何存储数据?有什么优势?

HashMap map = new HashMap();
map.put(“班长”, “小张”);//添加的数据转换为Object类型
map.put(“学委”, “小李”);
map.put(“体委”, “小王”);
String xiaozhang = (String)map.get(“班长”);

HashMap<K,V>泛型集合的使用方法

Map<String,Student> students = new HashMap<String,Student>();
students.put(“Jack”, student1);
students.put(“Rose”, student2);

HashMap常用的方法

在这里插入图片描述

遍历HashMap

keySet()方法获取键的集合

values()方法获取值的集合

案例:
package _List;

import java.util.HashMap;
import java.util.Map;

public class NewList {

	private int id;
	private String title;

	public NewList(int id, String title) {
		super();
		this.id = id;
		this.title = title;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public static void main(String[] args) {
		NewList newSport = new NewList(1, "体育新闻");
		NewList newMusic = new NewList(2, "音乐新闻");
		NewList newHistory = new NewList(3, "历史新闻");
		Map<String, NewList> map = new HashMap<String, NewList>();
		// 添加元素
		map.put("音乐", newMusic);
		map.put("体育", newSport);
		map.put("历史", newHistory);

		System.out.println("使用key遍历元素");
		for (String key : map.keySet()) {
			System.out.println(map.get(key).getId() + ":"
					+ map.get(key).getTitle());
		}
		System.out.println("使用values遍历元素");
		for (NewList newList : map.values()) {
			System.out.println(newList.getId() + ":" + newList.getTitle());
		}
		
		//直接查看
		System.out.println(map.get("音乐").getTitle());
	}
}
Collections类

Collections和Collection不同,前者是集合的操作类,后者是集合接口。
Collections提供的静态方法:
sort():排序
binarySearch():查找
fill():替换

Collections类可以对集合进行排序、查找和替换操作,实现一个类的对象之间比较大小,该类要实现Comparable接口,重写compareTo()方法。

使用Collections排序

需求说明:使用Collections类对员工集合按年龄进行排序并输出排序后的信息;
分析:员工类实现Comparable接口,调用Collections类的sort()方法。

@Override

public int compareTo(Employee employee) {
    if (this.age > employee.getAge()) {
        return 1;
    } else if (this.age == employee.getAge()) {
        return 0;
    } else {
        return -1;
    }
}

Iterator

Iterator接口表示对集合进行迭代的迭代器,专门实现集合的遍历

方法:
   hasNext():判断是否存在另一个可访问的元素
   next():返回要访问的下一个元素

System.out.println(“使用Iterator遍历,分别是:”);
Iterator it = list.iterator();
while (it.hasNext()) {
  String name = (String)it.next();
   System.out.println(name);
}

使用Iterator遍历
package _List;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class NewList {

	private int id;
	private String title;

	public NewList(int id, String title) {
		super();
		this.id = id;
		this.title = title;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public static void main(String[] args) {
		NewList newSport = new NewList(1, "新闻");
		NewList newMusic = new NewList(2, "音乐");
		NewList newHistory = new NewList(3, "历史");
		// 实例化泛型集合
		List<NewList> newList = new ArrayList<NewList>();
		newList.add(newSport);
		newList.add(newMusic);
		newList.add(newHistory);
		
		Iterator<NewList> iterator=newList.iterator();
		NewList newList2=null;
		while (iterator.hasNext()) {
			newList2=iterator.next();
			System.out.println(newList2.getId() + ":" + newList2.getTitle());
		}
	}
}

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值