java学习笔记③JAVA核心API编程-01集合框架和泛型
01 集合框架和泛型
ArrayList方法—add/ size/ get/ set/ contains/ indexOf / remove(Object obj)/ remove(int index)
LinkedList方法— addFirst / addLast / removeFirst / removeLast / getFirst / getLast
HashSet方法—add / clear / size / isEmpty / contains / remove 没有get(index)方法
HashSet是非线程安全的
HashMap方法—put / remove/ get / containsKey / containsValue / isEmpty / clear / size
Set keySet() / Collection values()
ArrayList遍历元素和随机访问元素的效率更高
LinkedList插入删除元素的效率高
set存放唯一值
String类重写了 equals()和hashCode()方法,所以此时认为str1和str3是相等的
如果在Student类中同时重写equals()和hashCode()方法,也会认为是相等的!
例如:
遍历map:Iterator、增强for循环、键值对(keySet取所有key后对set进行普通for循环)
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
System.out.println(key + " :" + map.get(key));
}
泛型:
ArrayList list = new ArrayList();
list.add("hello");
Object obj = list.get(0);
String hello = (String)list.get(0);
会将插入的数据都变成Object类型,读取时需要强制转换类型
泛型类、泛型方法、泛型接口
public T getName();
}
private T name;
public Student(T name){
this.name = name;
}
public void setName(T name){
this.name = name;
}
@Override
public T getName() {
return name;
}
public static void main(String[] args){
Student<String> st = new Student<String>("毛毛");
System.out.println(st.getName());
News news = new News("1","title1","orange");
TestInterface<News> news1 = new Student<News>(news);
System.out.println(news1.getName());
}
}
The type parameter String is hiding the type String 提示警告原因:
JAVA 为什么要用integer定义泛型而不是int?
因为:泛型需要是对象Object,int是基本数据类型