文章目录
一、Map集合的特点
1.键值对:一个键对应一个值
map集合的一些方法
注意:map集合中增加和修改都是用.put方法实现的,删除元素时.remove返回的是该元素的value值
Map<String,Integer> map = new HashMap<>();
//V put(K key, V value)
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);
System.out.println(map);
Object remove = map.remove("b");
System.out.println(remove);
System.out.println(map);
//修改 也是调用put方法
map.put("c", 32);
System.out.println(map);
//查询
System.out.println(map.get("c"));
//查询所有
//1.先拿到map集合中的所有key
Set keys = map.keySet();
for (Object key : keys) {
System.out.println("键:"+key+"值:"+map.get(key));
}
2.key键可以为空
如图所示:可以看到第四个对象的key为null但同样能够编译运行
二、Map集合的遍历方式
1.通过遍历键拿到值
与其他两个集合不同的是Map集合是以键值对的形式来储存元素的
2.entrySet
该映射中包含的映射关系是Set集合。将Map集合中的键和值映射关系打包成为一个对象放进Set集合中 如图所示:
3.KeySet
将map集合中所有的键存入到Set集合,再根据get方法,获取每一个键所对应的值 如图所示:
三、常用实现类HashMap
Map集合下有HashMap和TreeMap、HashTable(少用)
HashMap:同步又排队 安全
举例:统计字符串各个字母出现的次数
示例代码:
String s = "abcdbbdbjshhjjajjssjjnckeokjd";
char[] arr = s.toCharArray();
Map<Character, Integer> map = new TreeMap<>();
for (char c : arr) {
Integer value = map.get(c);
if(value == null) {
map.put(c, 1);
}else {
map.put(c, value+1);
}
//System.out.println(value);
}
Set<Entry<Character, Integer>> entrySet = map.entrySet();
for (Entry<Character, Integer> entry : entrySet) {
System.out.println(entry.getKey()+":"+entry.getValue());
}
输出效果:
实现思路:先将字符串分割成一个字符数组,在遍历拿个单个字符进行判断,如果该字符未出现过,也就是说该Value值为null,就将该键的Value值初始化为1,如果已经出现过,就在原来值得基础上加1
四、泛型
概念:通常在写一个类、接口或者方法时会发生数据类型或者不确定时,可以用<字母>来表示一个不确定的数据类型将潜在的问题暴露出来,早点预防这种错误
作用:将运行期出现的异常转换为编译期间的错误
提高了代码的健壮性
泛型类与泛型方法代码展示:
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
set.add(4);
set.add(5);
for (Object obj : set) {
if(Integer.valueOf(obj.toString()) % 2 == 0) {
System.out.println(obj);
}
}
}
}
class BookDao{
//add
//del
//edit
//list
}
class userdao extends Basedao{
@Override
public void add(Object t) {
// TODO Auto-generated method stub
}
@Override
public void del(Object t) {
// TODO Auto-generated method stub
}
@Override
public void edit(Object t) {
// TODO Auto-generated method stub
}
@Override
public List list(Object t) {
// TODO Auto-generated method stub
return null;
}
}
class Basedao<T>{
void add(T t) {
}
void del(T t) {
}
void edit(T t) {
}
List<T> list(T t) {
return null;
}
}
class Result {
<T>void add(T t) {
}
目前了解即可
五、集合框架工具类
1.Collections
排序:直接调用Collections方法中的Sort方法可以直接排序
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
list.add(new Person("b", 18));
list.add(new Person("c", 21));
list.add(new Person("a", 19));
//这里x,y是指集合中的元素
Collections.sort(list,(x,y)->y.compareTo(x));
System.out.println(list);
}
}
class Person implements Comparable<Person>{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person() {
// TODO Auto-generated constructor stub
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Person o) {
// TODO Auto-generated method stub
return o.getName().compareTo(this.name);
}
toarray方法
集合和数组之间的相互转换:
特点:
数组转成集合,本质上依然是一个数组,长度是不可变的
集合与数组所具备的方法是不一样的,如对于数组而言,就没有判断内部包含哪个元素·
list.toArray();
2.Arrays
toString()方法:
如果直接输出arr就会显示地址,但是调用arrays.toString()的方法,就会将数组原封不动的打印出来
aslist方法的好处:将数组转换为集合,数组方法比较少,集合方法比较多
sort方法:
之前在学java的时候我们学到过冒泡排序,代码量比较多,还要写几个元素之间的比较代码,但是在这里我们直接调用arrays中的sort方法进行冒泡排序能够方便很多