黑马程序员——Map集合类与集合数组工具类及JDK1.5后的新特性

------- android培训java培训、期待与您交流! ----------

Map

Map集合:该集合存储键值对,一对一对的往里存且保证键的唯一性(其实Set中保证元素唯一就是底层使用了Map集合)
Map的三个子类:
HashTable:底层是哈希表数据结构,不可以存入null键null值,线程是同步的。JDK1.0版本出现
HashMap:底层是哈希表数据结构,允许null键null值,线程不同步的。JDK1.2版本后出现
TreeMap:底层是二叉树数据结构,线程不同步,可以用于Map集合中的用键排序。

map.put(key,value):当存入相同key的时候,后来的value替换原来的value并且返回原value,原来没有value的话则返回null

重点:Map集合的两种取出方式

1,keySet:将map中所有的键存入到set集合中,在通过迭代取出key,再根据get(key)获取每一个键对应的值
2,entrySet:将map集合中的映射关系取出存入到set集合中
Set<Map.entry<key,value>> entrySet=map.entrySet();
Iterator<Map.entry<key,value>> it=entrySet.iterator();
注意:(这个注意是我在黑马论坛中得来的)TreeMap中存放值的对象类,实现自然比较顺序必须有意义(不能单纯返回0,1,-1,)要不然,这个map用entrySet方式迭代会报空指针异常,下面是其中的链接: 报空指针异常

小知识点:
interface Map{
public static interface Entry{     //只有接口在成员变量的位置上才能加静态修饰符,能加静态修饰符static的接口一定是内部接口
public abstract Object getKey();
public abstract Object getValue();
}
}
实现接口方法一:
class HashMap implements Map.Entry{
...//实现上面两个抽象方法
}
实现接口方法二:
class HashMap implements Map{
class Hah implements Map.Entry{
...//实现上面两个抽象方法
}
}
写这两个小知识点是为了回顾接口方面的知识,个人感觉对理解API和Java代码是必不可少的知识
Map的扩展:
即三个以上的映射关系:毕老师的视频上举了例子:在学校中有两个班,每个班有60名学生,每个学生有自己对应的学号
即:Map<String,HashMap>


Collections

Collections:是对集合进行操作的类,即集合工具类
主要的方法有:
sort(List<T> list):按照list中存放的元素T的自然顺序升序排序

public static <T extends Comparable<? super T>> void sort(List<T> list)
这句代码的理解:
T extends Comparable:T必须实现Comparable接口,这样T才有可比性
? super T:此比较方法比较的时候可以接收T的父类

sort(List<T> list, Comparator<? super T> com):按照指定的比较器排序

binarySearch:二分查找

fill(list,"pp"):将list中所有的元素都换成“pp”

replaceAll(list,目标,值);//将值替换掉目标

reverseOrder("比较器对象"):返回的是反转后的“比较器”

线程不安全的解决方案:synchronized List(List<T> list)

swap(List<T> list,int i,int j)替换角标为i和j的位置

应用(扑克牌洗牌):shuffle(List<T> list)  //随机置换

Arrays

Arrays:操作数组的工具类。
其中,包括的功能有:
①二分查找
②数组的复制
③数组的比较(内容比较和深层比较)
④数组的排序(局部排序)
⑤数组变成字符串
⑥数组变为List集合
其中①至⑤查阅API即可,⑥重点掌握

static <T> List<T> asList(T... a):将数组变为List集合
将数组变为集合的好处:可以使用集合的思想和方法来操作数组中的元素

注意:将数组变为集合,不可以使用集合的增删方法,因为数组的长度是固定的,要不然会抛UnsupportedOperationException(不支持操作异常)

int[] nums={4,5,6};
List<int[]> list=Arrays.asList(nums);//必须加泛型
如果数组中的元素都是对象,那么变成集合是,数组中的元素就直接转成集合中的元素。
如果数组中的元素都是基本数据类型,那么会将该数组作为集合中元素的存在。

Collection接口中定义的Object[] toArray()和<T> T[] toArray(T[] a)可以将集合变为数组
例:
//i=al.size();
String[] arr=al.toArray(new String[i]);//其中al为一个Collection子类对象,i为定义String数组元素的个数,如果al集合的元素个数少于i,则得到的数组多出的部分由默认的初始化补全,此处为null
解说:
1.当指定类型数组长度(上述的new String[i]中的i)小于集合size,那么该方法内部会创建一个新的数组,长度为集合的size;当指定类型数组长度(上述的new String[i]中的i)大于集合size,就不会新建数组,而是用传递进来的数组,所以,创建一个刚好长度数组最优
2.为什么要将集合变为数组:为了限定对元素的操作,不需要增删!

JDK1.5版本后的新特性

Collection在1.5版本后实现了Iterable<T>接口。
实现Iterable<T>接口允许对象成为“foreach”语句的目标。

高级for循环:for(数据类型 变量名:将赋予变量的集合或者数组)
局限:只能对集合中的元素进行取出,并不能做出修改(原因,没有角标)
迭代器除了遍历,还可以进行remove集合中元素的动作
如果是ListIterator,还可以在遍历过程中对集合进行增删改查动作

传统的for循环:功能强大。
高级for循环:必须有被遍历的目标(集合或者数组)


public static void show(int... arr){}
可变参数:隐式地将...封装成了数组arr,传入参数无论多少都行,不传即数组长度为0。
使用可变参数时需注意:可变参数一定要定义在参数列表的最后面。


staticImport:静态导入。
当类名重名时,需要指定具体的包;
当方法重名时,需要制定具体所属的类或对象。
体会:
普通导入import:导入的是一个类;
静态导入import static:导入的是类中的静态成员。

















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值