知识点总结
-
Map map = new HashMap();这时候,map.方法/变量 只能调用Map中有的方法/变量(HashMap继承过来的)HashMap = new HashMap();map.方法/变量 既可以调用父类继承过来的,也能调用自身扩展的方法/变量 -
HashMap可以用迭代器遍历输出
Iterator iter = map.keySet().iterator(); while(iter.hasNext()){ Object key = iter.next(); System.out.println(key + " " + map.get(key)); }
泛型
-
泛型的本质是参数化类型
- 泛型实现了参数化类型的概念,使代码可以应用于多种类型。
- “泛型”这个术语的意思是:“适用于许多许多的类型”。其最初目的是希望方法或类能够具备最广泛的表达能力。
-
泛型的最主要目的之一是用来指定容器要持有什么类型的对象,而且由编译器来包装类型的正确性。
-
暂时不指定类型,而是稍后再决定具体使用什么类型。
-
语法格式:
类型<E> 对象 = new 类型<E>();- 用<>括住,放在类名后面,然后在使用这个类的时候,再用实际的类型替换此类型参数。
-
在集合中的应用
-
使用泛型集合在创建集合对象时指定集合中元素的类型,从集合中取出元素时无需进行强制类型转换,并且如果把非指定类型对象放入集合,会出现编译错误
-
例子 :
public static void main(String[] args) { //创建新闻标题对象 NewTitle c1 = new NewTitle(1,"牧马人","小寒"); NewTitle c2 = new NewTitle(2,"大奔","小汪"); //创建存储新闻标题的集合对象 List<NewTitle> newsTitleList = new ArrayList<NewTitle>(); //按照顺序依次添加新闻标题 newsTitleList.add(c1); newsTitleList.add(c2); //获取新闻标题的总数 System.out.println("新闻标题的总数:" + newsTitleList.size()); //遍历集合 System.out.println("新闻标题名称为:"); for (NewTitle newTitle :newsTitleList ) { System.out.println(newTitle.getTitleName()); } }
-
-
参数化类型:包含一个类或接口,以及实际的类型参数列表
-
类型变量:是一种非限定性标识符,用来指定类、接口或者方法的类型
泛型类:
- 具有一个或多个类型参数的 类
? super T //只接收的父类/自己 向上限制(最下层已确定)
? extends T //只接收T的子类/自己 向下限制(最上层已确定)
-
定义泛型类
-
访问修饰符 class classname<TypeList>{} -
TypeList表示类型参数列表,每个类型变量之间用逗号隔开
-
public class Student<T>{} -
创建泛型类实例
new classname<TypeList>(arg List);- TypeList表示定义的类型参数列表,用逗号隔开
- arg List表示实际传递的类型参数列表,用逗号隔开
-
-
泛型接口
-
定义泛型接口
public interface StudentName<T>{ public T getName(T t); } -
泛型类实现泛型接口
访问修饰符 class Student<TypeList> implements StudentName<TypeList>{}
-
-
泛型方法
- 带有类型参数的方法
- 定义泛型方法与方法所在类、或接口是否是泛型类或泛型接口没有直接的联系。
- 无论是还是不是泛型类,如果需要就可以定义泛型方法
- 对于一个static的方法而言,无法访问泛型类的类型参数,所以如果static方法需要使用泛型能力,就必须使其成为泛型方法
Set接口
-
Set接口
- 可以存储一组唯一、无序的对象
- 实现类有:HashSet类、TreeSet类
-
方法
方法 说明 boolean add(Object obj) 如果Set中没有包含指定元素o,则添加指定元素o void clear() 从Set中移除所有元素 int size() 返回Set中元素的数量 boolean isEmpty() 如果Set中不包含任何元素,则返回true boolean contains(Object obj) 如果Set中包含指定元素,返回true boolean remove(Object obj) 如果指定元素o存在于Set中,则将其移除 -
例子
public class ArrayList { public static void main(String[] args) { //创建多个新闻标题对象 NewTitle c1 = new NewTitle(1,"牧马人","www"); NewTitle c2 = new NewTitle(2,"大奔","aaa"); NewTitle c3 = new NewTitle(1,"沃尔沃","mmm"); NewTitle c4 = new NewTitle(2,"甲壳虫","hhh"); //创建存储新闻标题的集合对象并添加新闻标题 Set newsTitleList = new HashSet(); //依照顺序依次添加新闻标题 newsTitleList.add(c1); newsTitleList.add(c2); newsTitleList.add(c3); newsTitleList.add(c4); //获取新闻标题总数 System.out.println("新闻标题数目:" + newsTitleList.size() + "条"); //判断集合中是否包含甲壳虫新闻标题 System.out.println("甲壳虫新闻是否存在:" + newsTitleList.contains(c4)); //移除甲壳虫 newsTitleList.remove(c4); System.out.println("甲壳虫对象已经删除"); System.out.println("集合是否为空:" + newsTitleList.isEmpty()); System.out.println("遍历所有的新闻标题"); for (Object obj : newsTitleList) { NewTitle newTitle = (NewTitle) obj; System.out.println("新闻标题名称:" + newTitle.getTitleName()); } } }
-
-
set遍历
//Iterator
Iterator it = map.keySet().iterator();
while(it.hasNext()){
Object key = it.next();
System.out.println(it.next().toString());
}
//entrySet()
Set set1 = map.keySet();
for(Object obj : set1){
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry.getKey() + "----->" + entry.getValue());
}
//keySet()
Set set = map.keySet();
for(Object obj : set){
System.out.println(obj + "----->" + map.get(obj));
}