基于《java2实用教程》的java知识点复习整理【第十五章——Java泛型与集合框架】

本文详细介绍了Java中的泛型概念,包括泛型类、泛型方法和泛型接口的使用,并提供了实例演示。此外,还深入讲解了集合框架,特别是List接口的实现,如ArrayList和LinkedList的特点及常用操作。同时,提到了Map接口的实现,如HashMap的使用方法。文章还对比了ArrayList和LinkedList在添加、删除和获取元素时的效率差异。
摘要由CSDN通过智能技术生成

第十五章——Java泛型与集合框架

一、知识结构框架

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CcWfFEV8-1620391379237)(C:\Users\官二的磊子\Desktop\image-20210507203636896.png)]

二、知识点详解

###1、泛型

编写的代码可以被不同类型的对象所重用,主要目的是可以建立具有类型安全的集合框架。

1.1 泛型类

具有泛型变量的类,在类名后用代表引用类型,如ArrayList,HashMap,HashSet

//ArrayList部分源码
public class ArrayList<E> extends AbstractList<E>
    implements List<E>,RandomAccess,Cloneable,java.io.Serializable{
    
    public E get(int index){}
}
1.1.1 设计泛型类
public class Interval<T>{
    private T lower;
    public getLower(){
        return lower;
    }
}
1.1.2 调用泛型类
Interval<Integer> v = new Interval<Integer>();
Interval<Integer> v = new Interval<>();//后面的可以省略
1.2 泛型方法

具有泛型参数的方法,可以在普通类或泛型类中,定义的泛型在修饰符后,返回类型前

1.2.1 设计泛型方法
public class ArrayUtil{
    public static<T> T getMiddle(T... a){
        return a;
    }
1.2.1 调用泛型方法
ArrayUtil arr = new ArrayUtil();
String s = a.<String>getMiddle("a","b","c")
1.3 泛型接口

与泛型类相似,在类名后加,实现接口时,指定类型

1.3.1 设计泛型接口
public interface Calculator<T>{
    public T add(T operand1,Toperand2);
}
1.3.2 实现泛型接口
public class IntegerCalculator implements Calculator<Integer>{
    public Integer add(Integer operand1,Integer Toperand2){
        return operand1 + operand2;
}     

IntegerCalculator a = new IntegerCalculator();
Calulator<Integer> c = new IntegerCalculator();//用泛型接口声明对象时

2、集合框架

框架集合

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zYDQKcHF-1620391379240)(C:\Users\官二的磊子\Desktop\image-20210507203234503.png)]

2.1 List
2.1.1 ArrayList实现了长度可变的数组

对象创建:List list = new ArrayList();

方法:与List方法相同

方法名说 明
boolean add(Object o)在列表的末尾顺序添加元素,起始索引位置从0开始
void add(int index,Object o)在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间
int size()返回列表中的元素个数
Object get(int index)返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换
boolean contains(Object o)判断列表中是否存在指定元素
boolean remove(Object o)从列表中删除元素
Object remove(int index)从列表中删除指定位置元素,起始索引位置从0开始

使用例子

public class Demo {
	public static void main(String[] args) {
		//1、创建4个学生对象
		Student stu1 = new Student("Tom", 10);
		Student stu2 = new Student("Aimee", 11);
		Student stu3 = new Student("George", 11);
		Student stu4 = new Student("Angelia", 13);
		//2、创建ArrayList集合对象并把4个学生放入其中
		List list = new ArrayList();
		list.add(stu1);
		list.add(stu2);
		list.add(stu3);
		list.add(2,stu4);//添加stu4到指定的位置
		//3、输出集合中学生的总数
		System.out.println("总共有学生"+list.size()+"个。");
		//4、通过遍历集合显示所有学生的信息
		for (int i = 0; i < list.size(); i++) {
			Student student=(Student)list.get(i);
			System.out.println(student.getName()+"\t"+student.getAge());
		}
	}
}

2.1.2LinkedList采用链表存储方式

对象创建:LinkedList mylist = new LinkedList();

方法:在List方法上新增

方法名说 明
void addFirst(Object o)在列表的首部添加元素
void addLast(Object o)在列表的末尾添加元素
Object getFirst()返回列表中的第一个元素
Object getLast()返回列表中的最后一个元素
Object removeFirst()删除并返回列表中的第一个元素
Object removeLast()删除并返回列表中的最后一个元素

例子

//对象创建
LinkedList<String> mylist = new LinkedList<String>();
//常用操作
mylist.add("h");
mylist.add("o");
mylist.add("w");
mylist.remove(1);
mylist.get(1);
mylist.getFirst();
mylist.getLAst();
mylist.removeFirst();
mylist.removeLAst();
int n = mylist.size();
int index = mylist.indexOf("o");
int index = mylist.lastindexOf("o");
//遍历
Iterator<String> iter = mylist.iterator;
while(iter.hasNext()){
    System.out.println(iter.next);
}
2.2 Map

对象创建:Map countries = new HashMap();

方法

方法名说 明
Object put(Object key, Object val)以“键-值对”的方式进行存储
Object get (Object key)根据键返回相关联的值,如果不存在指定的键,返回null
Object remove (Object key)删除由指定的键映射的“键-值对”
int size()返回元素个数
Set keySet ()返回键的集合
Collection values ()返回值的集合
boolean containsKey (Object key)如果存在由指定的键映射的“键-值对”,返回true

使用例子

public class Test4 {
	public static void main(String[] args) {	
		Map countries = new HashMap();
		countries.put("CN", "中华人民共和国");
		countries.put("RU", "俄罗斯联邦");
		countries.put("FR", "法兰西共和国");
		countries.put("US", "美利坚合众国");
		
		String country = (String) countries.get("CN");
		System.out.println("CN对应的国家是:" + country);
		
		System.out.println("Map中共有"+countries.size()+"组数据");
		
		countries.remove("FR");
              System.out.println("Map中包含FR的key吗?" + 
				countries.containsKey("FR"));
		System.out.println( countries.keySet() ) ;
		System.out.println( countries.values() );
		System.out.println( countries );
	}
}

三、题库考查知识点整理

1、LinkedList、Stack、ArrayList实现了List接口。

2、removeLast()是LinkedList有,但ArrayList类没有的方法。

3、ArrayList的public void add(int index,E element)方法的执行效率低于LinkedList的效率。

4、ArrayList的public E get(int index)方法的执行效率效率高于LinkedList的效率。

5、ArrayList的public E remove(int index)方法的执行效率低于LinkedList的效率。

6、ArrayList的public E get(int index)方法的执行效率效率高于LinkedList的效率。

7、LinkedList类不是线程安全的,即提供的添加,删除操作都不是同步(synchronized)的。

8、LinkedList类不是线程安全的,即提供的添加,删除操作都不是同步(synchronized)的。

9、Vector类是线程安全的,即提供的添加,删除操作都是同步(synchronized)的。

10、Stack类是线程安全的,即提供的压栈,弹栈操作都是同步(synchronized)的。

11、HashMap<K,V>对象不是采用顺序表这种数据结构存储数据的。HashMap<K,V>对象采用散列表这种数据结构存储数据。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来村村长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值