泛型和反射 Java的部分反射API也是泛型。例如:Class<T>就是泛型: // compile warning: Class clazz = String.class; String str = (String) clazz.newInstance(); // no warning: Class<String> clazz = String.class; String str = Java教程 霍师傅 2024-11-29 46 热度 0评论
java集合简介 什么是集合(Collection)?集合就是“由若干个确定的元素所构成的整体”。例如,5只小兔构成的集合: ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐ │ (\_(\ (\_/) (\_/) (\_/) (\(\ │ ( -.-) (•.•) (>.<) (^.^) (='.') │ C(")_(") (")_(") (" Java教程 霍师傅 2024-11-30 38 热度 0评论
使用List 在集合类中,List是最基础的一种集合:它是一种有序列表。 List的行为和数组几乎完全相同:List内部按照放入元素的先后顺序存放,每个元素都可以通过索引确定自己的位置,List的索引和数组一样,从0开始。 数组和List类似,也是有序结构,如果我们使用数组,在添加和删除元素的时候,会非常不方便。例如,从一个已有的数组{'A', 'B', 'C', 'D', 'E'}中删除索引为2的元素: ┌─ Java教程 霍师傅 2024-11-30 21 热度 0评论
编写equals方法 我们知道List是一种有序链表:List内部按照放入元素的先后顺序存放,并且每个元素都可以通过索引确定自己的位置。 List还提供了boolean contains(Object o)方法来判断List是否包含某个指定元素。此外,int indexOf(Object o)方法可以返回某个元素的索引,如果元素不存在,就返回-1。 我们来看一个例子: import java.util.List; pu Java教程 霍师傅 2024-11-30 32 热度 0评论
使用Map 我们知道,List是一种顺序列表,如果有一个存储学生Student实例的List,要在List中根据name查找某个指定的Student的分数,应该怎么办? 最简单的方法是遍历List并判断name是否相等,然后返回指定元素: List<Student> list = ... Student target = null; for (Student s : list) { if ("Xi Java教程 霍师傅 2024-12-01 25 热度 0评论
编写hashCode方法 我们知道Map是一种键-值(key-value)映射表,可以通过key快速查找对应的value。 以HashMap为例,观察下面的代码: Map<String, Person> map = new HashMap<>(); map.put("a", new Person("Xiao Ming")); map.put("b", new Person("Xiao Hong")) Java教程 霍师傅 2024-12-01 23 热度 0评论
使用EnumMap 因为HashMap是一种通过对key计算hashCode(),通过空间换时间的方式,直接定位到value所在的内部数组的索引,因此,查找效率非常高。 如果作为key的对象是enum类型,那么,还可以使用Java集合库提供的一种EnumMap,它在内部以一个非常紧凑的数组存储value,并且根据enum类型的key直接定位到内部数组的索引,并不需要计算hashCode(),不但效率最高,而且没有额外 Java教程 霍师傅 2024-12-01 30 热度 0评论
使用TreeMap 我们已经知道,HashMap是一种以空间换时间的映射表,它的实现原理决定了内部的Key是无序的,即遍历HashMap的Key时,其顺序是不可预测的(但每个Key都会遍历一次且仅遍历一次)。 还有一种Map,它在内部会对Key进行排序,这种Map就是SortedMap。注意到SortedMap是接口,它的实现类是TreeMap。 ┌───┐ │Map│ └───┘ ▲ ┌────┴─────┐ │ Java教程 霍师傅 2024-12-01 26 热度 0评论