目录
1.map集合的特点及遍历方式:
1.键值对
2.遍历:
拿到key,再拿值
拿到映射关系,键值都有了
代码展示如下:
package com.xbb.map;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;/**
* map集合的特点:
* 1.键值对
* 2.遍历:
* 拿到key,再拿值
*
* HashMap和hashtable的区别:
* 1.hashtable是线程安全的
* 2. jdk1.8以下 hashtable的key不能放null
*
* @author Administrator
*
*/
public class Demo1 {
public static void main(String[] args) {
Hashtable<String ,Integer> ht = new Hashtable<>();
//public synchronized v put(K key,V value)
ht.put("a", 1);
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", 22);
System.out.println(map);
//查询单个
System.out.println(map.get("c"));
//查询所有
//1.拿到map集合中的所有key
Set ks = map.keySet();
for (Object obj : ks) {
System.out.println("键:"+ks+"; 值:"+map.get(ks));
}
//2.拿到映射关系
Set<Entry<String, Integer>> entrySet = map.entrySet();
for (Entry<String, Integer> entry : entrySet) {
System.out.println("键:"+entry.getKey()+"; 值:"+entry.getValue());
}
}
}
注意:
HashMap和hashtable的区别:
1.hashtable是线程安全的
2. jdk1.8以下 hashtable的key不能放null
2.字符串出现的次数
debugger的使用:调试代码
1.打断点(双击要执行的代码,双击后会出现一个小点)
2.采用debugger的方式运行程序(右键找到Debug As,选中java )
3.进入调试窗口,左上方有一个step over调试箭头,快捷键F6
4.接下来可以通过F6一步步调试当前程序对应的每一个变量
package com.xbb.map;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Demo2 {
public static void main(String[] args) {
String s = "auiuiuydjadoaphjhh";
/**
* 实现思路:
* 1.做字符串切割,得到一个字符数组
* 2.接下来遍历,拿到单个字符
* 3.如果该字符没有出现过,value值为null,那么该字符为key,值初始化为1
* 4.如果已经出现过,拿到原来的值为+1
*/
/**
* debugger的使用:调试代码
* 1.打断点
* 2.采用debugger的方式运行程序
* 3.进入调试窗口,左上方有一个step over调试箭头,快捷键F6
* 4.接下来可以通过F6一步步调试当前程序对应的每一个变量
*/
char[] arr = s.toCharArray();
Map<Character, Integer> map = new HashMap<Character, Integer>();
for (char c : arr) {
Integer value = map.get(c);
if(value==null) {
map.put(c, 1);
}
else {
map.put(c, value+1);
}
}
Set<Entry<Character, Integer>> entrySet = map.entrySet();
for (Entry<Character, Integer> entry : entrySet) {
System.out.println(entry.getKey()+":"+ entry.getValue());
}
}
}
3.泛型
概念:
之前:不健壮代码,在运行时才会把错误暴露出来
之后:将错在的问题暴露出来,早预防早治疗
将运行期出现的异常转换为编译器的错误
代码如下:
package com.xbb.map;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* 泛型
* 之前:不健壮代码,在运行时才会把错误暴露出来
* 之后:将错在的问题暴露出来,早预防早治疗
* 将运行期出现的异常转换为编译器的错误
* @author Administrator
*
*/
public class Demo3 {
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);
}*/
set.remove(obj);
}
}
}
class BookDap{
}
class UserDao extends BasekDao {
}
class BasekDao<T>{
void add(T t) {
}
void del(T t) {
}
void edit(T t) {
}
List<T> list(T t) {
return null;
}
}
4.集合框架工具类
易错点:
package com.xbb.map;
import java.util.Arrays;
import java.util.List;/**
* 集合之间的转换
* @author Administrator
*
*/
public class Demo4 {
public static void main(String[] args) {
String [] arr = {"aa","bb","cc","dd"};
List<String> list = Arrays.asList(arr);
list.add("ee");
System.out.println(list.size());
}
}
集合之间的转换:
1.数据转成集合,本质上依然是一个数组,长度是不可变的
2.集合与数组所具备的方法是不一样的,如对于数组而言,就没有判断内部包含能够元素
对于工具类其他方法的应用:排序
Collections
排序前:
排序后:
Collections.sort(list);
升序
Collections.sort(list, (x,y) -> y.compareTo(x));
package com.xbb.map;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* 对于工具类其他方法的应用
* @author Administrator
*
*/
public class Demo5 {
public static void main(String[] args) {
/* List<String > list = new ArrayList<String>();
list.add("d");
list.add("a");
list.add("c");
list.add("b");
System.out.println(list);
System.out.println("------------------");
Collections.sort(list);
System.out.println(list);
System.out.println("--------------------");
Collections.sort(list, (x,y) -> y.compareTo(x));
System.out.println(list);
*/
List<Person> list = new ArrayList<>();
list.add(new Person("aa", 12));
list.add(new Person("bb", 14));
list.add(new Person("cc", 16));
list.add(new Person("ee", 18));
System.out.println(list);
Collections.sort(list);
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);
}
}
注意:排序的前提要调用implements Comparable<Person>的方法 如果不想调用方法就
//Collections.sort(list);
Collections.sort(list, (x,y)-> x.getName().compareTo(y.getName()));
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);
}
Arrays
Integer[] arr = {3,2,6,4,6};
Arrays.sort(arr,(x,y)-> y-x);
System.out.println(Arrays.toString(arr));