专题类的网站,郴州全网推广公,国家职业资格证书网站,关键词查询工具p548-568
明天开始坦克大战
Entry
昨天没搞明白的Map、Entry、EntrySet#xff1a;//GPT教的
Map 和 Entry 的关系
1.Map 接口#xff1a;它定义了一些方法来操作键值对集合。常用的实现类有 HashMap、TreeMap 等。
2. Entry接口#xff1a;Entry 是 Map 接口的一个嵌…p548-568
明天开始坦克大战
Entry
昨天没搞明白的Map、Entry、EntrySet//GPT教的
Map 和 Entry 的关系
1.Map 接口它定义了一些方法来操作键值对集合。常用的实现类有 HashMap、TreeMap 等。
2. Entry接口Entry 是 Map 接口的一个嵌套接口表示 Map 中的一个键值对。每个 Entry 包含一个键和一个值。
EntrySet 的使用
entrySet() 是 Map 接口中的一个方法返回的是 Map 中所有键值对Entry的一个视图。这是一个 SetMap.EntryK,V 类型的集合表示 Map 中的所有键值对。
使用示例
public class Homework03 {public static void main(String[] args) {HashMap map new HashMap();map.put(jack,650);map.put(tom,1200);map.put(smith,2900);System.out.println(map);//给jack换工资map.put(jack,1000);System.out.println(map);//遍历//取出value也可以啊?//不能事实证明value只是一个副本并不会影响到真的值Collection values map.values();for(Object o:values){o(Integer)o100;}Set ks map.keySet();System.out.println(map);for(Object o : ks){ //取出来的o是key然后根据key更新map.put(o,(Integer)map.get(o)100);}System.out.println(map);System.out.println();//遍历-EntrySetSet es map.entrySet();//Entry是map的内部嵌套接口包含一个键值对信息entryset方法返回的是set集合是每一个Entry的映射Iterator i es.iterator();while (i.hasNext()){Map.Entry next (Map.Entry)i.next();//获取每一个键值对System.out.println(next.getKey()***next.getValue());}}
}
去重机制
试分析HashSet和TreeSet分别如何实现去重的 (1) HashSet的去重机制: hashCode() equals(),底层先通过存入对象,进行运算得到一个hash值通过hash值得到对应的索引如果发现table索引所在的位置,没有数据就直接存放,如果有数据就进行equals比较[遍历比较]如果比较后不相同,就加入否则就不加入. (2) TreeSet的去重机制:如果你传入了一个Comparator匿名对象就使用实现的compare去重如果方法返回0,就认为是相同的元素/数据就不添加如果你没有传入一个Comparator匿名对象则以你添加的对象实现的Compareable接口的compareTo去重.即动态绑定机制。如果是自定义的类那就去implements接口然后实现compareTo 坑好多的Homework已经重写了hashcode和equals 在p1的name换成CC时它的hash就不一样了remove的时候就不会定位到第一次加入的p1接下来new的这个1001-CC会加入到刚刚想要remove的地方。最后new的1001-AA会加入到p1的位置但是这里有p1了可是值不一样p1已经被改成了CC所以它会挂在p1后面 Vector和ArrayList比较 泛型
有些方法只能传入固定的类型如果不小心传入了别的就会出事。
1)编译时检查添加元素的类型提高了安全性
2)减少了类西转换的次数,提高效率 不使用泛型 Dog - Object - Dog //放入到ArrayList 会先转成Object在取出时还需要转换成Dog√ 使用泛型 Dog- Dog - Dog //放入时和取出时不需要类型转换提高效率 3)不再提示编译警告
泛型介绍
int a 10; 老韩理解:泛(广泛)型(类型) Integer, String,Dog
泛型就是指定数据类型的一种数据类型 1)泛型又称参数化类型是Jdk5.0出现的新特性,解决数据类型的安全性问题
2)在类声明或实例化时只要指定好需要的具体的类型即可。 3) Java泛型可以保证如果程序在编译时没有发出警告运行时就不会产生ClassCastException异常。同时代码更加简洁、健壮 4)泛型的作用是:可以在类声明时通过一个标识表示类中某个属性的类型或者是某个方法的返回值的类型或者是参数类型。 例在编译期间再确定E是什么类型。 泛型的语法
●泛型的声明 interface接口T{}和class类KV{}
比如:List ,ArrayList 说明: 1)其中T,K,V不代表值,而是表示类型。 2)任意字母都可以。常用T表示是Type的缩写 泛型的实例化: 要在类名后面指定类型参数的值(类型)。如: 1) ListString strList new ArrayListString;
2) IteratorCustomer iterator customers.iterator:
泛型使用细节
1.给泛型指向数据类型必须是引用类型不能是基本数据类型
2.再给泛型制定类型时可以传它本身类型或它的子类型。
3.泛型的使用形式 ArrayList Integer list new ArrayListInteger(); ArrayList Integer list new ArrayList();//尖括号里可以省略它自动填入编译类型的规定泛型
4.当你不给泛型指定数据类型会默认是Object
自定义泛型
基本语法 class类名T, R.. {成员)//可以有多个泛型 .注意细节 1)普通成员可以使用泛型(属性、方法)
2)使用泛型的数组不能初始化 3)静态方法和静态属性中不能使用类的泛型。因为在类加载时对象还没创建而静态方法是和类相关的所以不能完成初始化。 4)泛型类的类型是在创建对象时确定的(因为创建对象时需要指定确定类型)
5)如果在创建对象时没有指定类型默认为Object
例如这Tiger就是自定义泛型 自定义泛型接口
interface 接口名T,R...{} 1)接口中静态成员也不能使用泛型(这个和泛型类规定一样)
2)泛型接口的类型,在继承接口或者实现接口时确定 3)没有指定类型默认为Object
泛型接口注意细节 1)接口中静态成员也不能使用泛型(这个和泛型类规定一样)2)泛型接口的类型,在继承接口或者实现接口时确定 3)没有指定类型默认为Object就是你去继承接口或者实现接口的时候啥都不写但是不推荐这么搞
自定义泛型方法
修饰符T,R..返回类型方法名(参数列表){) ·注意细节 1.泛型方法可以定义在普通类中,也可以定义在泛型类中 2.当泛型方法被调用时类型会确定 3. public void eat(E e)0,修饰符后没有T,R.. eat方法不是泛型方法而是使用了泛型
泛型的继承和通配符
1)泛型不具备继承性 ListObject list new ArrayListString0;1/对吗?不对泛型不具有继承性
2)?︰支持任意泛型类型 3)? extends A:支持A类以及A类的子类规定了泛型的上限 4)? super A:支持A类以及A类的父类不限于直接父类规定了泛型的下限
JUnit测试框架 如图。一把用JUnit5 明天就是坦克大战了