JAVA笔记_集合、迭代器、泛型、比较器

集合Collection

由于数组的局限性,引入了集合,例如数组的定长,保存的元素类型一致

集合框架
集合框架

Collection和Collections的区别
Collection是集合的接口,其内元素无序,不唯一
Collections是包含了集合操作的静态方法的工具类

List接口

有序,不唯一
ArrayList: 
  特点:存储的对象的地址连续,长度可变,查询效率高,添加和删除的效率较低
LinkedList
  特点:链表方式存储,每一个存储的对象都有下一个存储对象的地址信息,查询效率较低,但是删除和插入的效率高
通用方法:
  add(Object o) 在列表末尾顺序添加元素
  add(int index,Object o)  在索引位置添加元素,插入
  size() 返回列表中元素的个数
  get(int index) 返回索引位置的元素,但是返回的元素类型为Object
  contains(Object o) 判断列表中是否存在指定元素,返回类型为boolean
  remove(Object o) 从列表中删除元素
  remove(int index) 根据索引删除对应的元素

 
LinkedList特有方法
  addFirst(Object o) 向列表的头部插入元素
  addLast(Object o) 向列表的尾部插入元素
  getFirst() 返回列表第一个元素
  getLast() 返回列表最后一个元素
  removeFirst() 删除并返回列表的第一个元素
  removeLast() 删除并返回列表的最后一个元素

Set接口

无序,唯一,可用于一些数据的去重操作

Map接口

HashMap 和 TreeMap
  无序,以键值对的形式存储信息
  查询效率相对最高
常用方法:
  put(Key,Value) 添加一个键值对
  get(Object Key) 根据键来返回值的内容
  remove(Object Key) 删除指定的键映射的键值对
  size() 返回元素个数
  keySet() 返回键的集合
  values() 返回值的集合
  containsKey(Object Key) 判断是否存在对应的键映射的键值对,返回boolean类型

迭代器

由于集合没有提供相应的遍历方法,那么就需要迭代器来实现遍历
Collection接口中的iterator()方法返回一个Iterator
next()方法和hasNext()方法

ArrayList arr = new ArrayList();
Iterator it = arr.iterator(); //创建迭代器
while(it.hasNext()){  //判断it是否存在下一个元素
	ArryList x = it.next();  //返回当前元素
	System.out.println(x);
}

泛型

在使用集合是,get()方法返回的为Object类型对象,之后需要进行强制类型转换才能使用,以及迭代器中也需要强制类型转换,这样既不方便,数据也不安全。
 
个人理解泛型类似于规范,在一个集合声明时,使用泛型规范其中元素的类型,使得其存储的元素类型是自己规定的类型,以及调用方法是返回的类型都是自己规定的类型

HashMap <String,String> MyMap = new HashMap<String,String>(); //规定了键值对类型都为String类型
	MyMap.put("1","柚子");  //存入元素是,只能放入String类型
	MyMap.put("2","橘子");
	MyMap.put("3","哈密瓜");
	MyMap.put("4","火龙果");
	System.out.println("1对应的是"+MyMap.get("1"))//免去了强制类型转换
//=======================================================
//迭代器中
Iterator<String>it = MyMap.keySet().iterator(); //创建迭代器
while(it.hasNext()){
	String x = it.next();  //原返回类型为Object  但是加了泛型返回值为String,免去了强制类型转换
	System.out.println(x);//打印所有键
}

泛型类

//定义一个泛型类
public class Pair<T>   //T表示其中属性的类型,同时也是参数
{
	private T first;
	private T second;
	public T getFirst() { return first; }
	public T getSecond() { return second; }
	public void setFirst(T newValue) { first = newValue; }
	public void setSecond(T newValue) { second = newValue; }
}

比较器Comparable

java中大部分数据类型都实现了Comparable接口,所以很多数据类型都是可以比较大小的

class ArrayAlg {
/**
*实现Comparable接口,返回值类型为Pair(上面定义的泛型类)
*参数列表为T类型的数组    T待定类型
**/
	public static <T extends Comparable> Pair<T> minmax(T[ ] a) {
		if (a == null || a.length == 0) {
			return null;
		}
		T min = a[0];T max = a[0];
		for (int i = 1; i < a.length; i++) {
			if (min.compareTo(a[i]) > 0) {min = a[i];}
			if (max.compareTo(a[i]) < 0) { max = a[i];}
		}
		return new Pair<T>(min, max);
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值