
package day04;
import java.util.HashMap;
import java.util.Map;
/**
* Map数据结构
* 存放数据以key-value的形式成对保存
* Map保存的数据可以重复,但是key不可以!
* 若重复保存相同key的value时,实际的操作是替换value操作。
*
* 同样这样的数据结构在存放数据时也不建议存放两种以上的数据类型。所以,
* 通常我们在使用Map时也要使用泛型约束存储内容的类型
* @author Administrator
*
*/
public class DemoMap {
public static void main(String[] args) {
/**
* 创建Map时使用泛型。这里要约束两个类型,一个是key的类型,一个是value的类型
* 创建一个key为字符串value为Point的Map
*/
Map map = new HashMap();
/**
* 使用put方法将元素以key的形式放入map
*/
map.put("1,2", new Point(1,2));
map.put("3,4", new Point(3,4));
/**
* 注意,因为map中已经存在了key为"1,2"的元素。若再次以
* 该key存放数据,那么Point(5,6)会替换之前的Point(1,2)!
*/
map.put("1,2", new Point(5,6));
/**
* 获取map中的元素使用get方法
* V get(K key):传入对应的key获取其对应的Value
*/
Point p = map.get("1,2");
System.out.println("x="+p.getX()+",y="+p.getY());
/**
* 若给定的key在map中不存在则返回null!
* 所以,原则上在map中获取元素时要先判断是否有该元素
* 只有在使用。避免空指针异常的出现。
*
* Map在获取元素时非常有针对性。
* 集合想获取元素需要遍历集合内容。而Map不需要。你只要给它特定的key就可以获取该元素。
*/
p = map.get("haha");
System.out.println("x="+p.getX()+",y="+p.getY());//报错
}
}
package day04;
import java.util.HashMap;
import java.util.Map;
/**
* Map的小应用
* boolean containsKey(K key):当前map中是否包含给定的key
* boolean containsValue(V value):当前map中是否包含给定的value
* @author Administrator
*
*/
public class DemeMap2 {
public static void main(String[] args) {
/**
* 需求:统计每个数字出现的次数
* 思路:
* 使用每个数字作为key存放在map中,默认值为1
* 之后判读后面的数字是否作为key在map中存在:
* 结果:
* 不存在:那么使用这个数字作为key,value为1存入
* 存在:那么使用key将value取出加1后再存入
*/
/**
* 步骤:
* 1:将字符串str根据","拆分
* 2:创建map
* 3:循环拆分后的字符串数组
* 4:将每一个数字作为key在map中检查是否包含
* 5:包含则对value值累加1
* 6:不包含则使用该数字作为key,value为1存入map
*/
String str = "123,434,6344,322323,32,543,54,2,3,23,32";
//1
String[] array = str.split(",");
//2
Map map = new HashMap();
//3
for(String number:array){
//4
if(map.containsKey(number)){
//5
int sum = map.get(number);//将原来统计的数字取出
sum++; //对统计的数字加1
map.put(number, sum); //放回去
}else{
//6
map.put(number,1);//第一次出现,value存放1
}
}
System.out.println(map); //map也重写了toString()
}
}
package day04;
import java.util.Arrays;
public class DemoSplit {
public static void main(String[] args) {
//逗号放在最后,不占一个数,中间,头部占
String str = "123,434,,,6344,322323,32,543,54,2,3,23,32";
String[] array = str.split(",");
System.out.println(array.length);
System.out.println(Arrays.toString(array));
}
}
package day04;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
/**
* 遍历hashMap
* 方法1:获取所有的key并根据key获取value从而达到遍历的效果
* HashMap获取所有key的方法:keySet()
* 该方法可以获取保存在该map下所有的key并以Set集合的形式返回
* @author Administrator
*
*/
public class DemoHashMap {
public static void main(String[] args) {
Map map = new LinkedHashMap();
map.put("1,2", new Point(1,2));
map.put("2,3", new Point(2,3));
map.put("3,4", new Point(3,4));
map.put("4,5", new Point(4,5));
/**
* 获取当前map中所有的key
* 因为key在HashMap的泛型中规定了类型为String
* 所以返回的Set中的元素也有时String,为了更好的使用
* 我们在定义Set类型变量时也应该加上泛型
*/
Set keyset = map.keySet();
/**
* 遍历所有的key,根据key去map中获取对应的value从而达到遍历map的效果
*/
for(String key:keyset){
Point p = map.get(key);//根据key获取value
System.out.println(key+" : "+p.getX()+","+p.getY());
}
//普通for循环
for(Iterator it = keyset.iterator()
;
it.hasNext()
;
){
String key = it.next();
Point p = map.get(key);//根据key获取value
System.out.println(key+":"+p.getX()+","+p.getY());
}
}
}
package day04;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
* 迭代map的方式2
* 以键值对的形式迭代
*
* map支持另一个方法entrySet()
* 该方法返回一个Set集合,里面的元素是map中的每一组键值对
* map以Entry类的实例来描述每一个键值对
*
* Entry描述一个键值对
* 其有两个方法:
* getKey():获取key值
* getValue():获取value值
*
* @author Administrator
*
*/
public class DemoHashMap2 {
public static void main(String[] args) {
/**
* LinkedHashMap:
* 用法和HashMap相同,内部维护着一个链表。可以使其存放元素时的顺序与迭代
* 时一致。
*/
Map map = new LinkedHashMap();
map.put("1,2",new Point(1,2));
map.put("2,3", new Point(2,3));
map.put("3,4", new Point(3,4));
map.put("4,5", new Point(4,5));
/**
* 使用entrySet()遍历map
* 获取map中所有的键值对
* Set的泛型不会变,就是Entry
*
* Entry所在位置:java.util.Map.Entry
* Entry也需要泛型的约束。其约束的泛型应该和Map相同!
* 因为一个Entry实例保存着这个Map中的一组键值对。
*/
Set entrySet = map.entrySet();
/**
* 遍历键值对
*/
for(Entry entry:entrySet){
//获取key
String key = entry.getKey();
//获取value
Point p = entry.getValue();
System.out.println(key+":"+p.getX()+","+p.getY());
}
}
}
package day04;
import java.util.HashMap;
import java.util.Map;
/**
* 联系人信息
* @author Administrator
*
*/
public class Contact {
/**
* 定义一个Map类型属性
* 该属性可以存放自定义的属性内容
*/
Map fields = new HashMap();
/**
* 设置属性的方法
* field 属性名
* value 属性值
*/
public void set(String field,String value){
fields.put(field, value);
}
/**
* 获取联系人信息
* field 属性名
* return 对应该属性的值
*/
public String get(String field){
return fields.get(field);
}
public String toString(){
//将HashMap的toString()作为联系人的toString()返回
return fields.toString();
}
}
package day04;
/**
* 测试联系人信息
* @author Administrator
*
*/
public class DemoContact {
public static void main(String[] args) {
/**
* 创建一个联系人信息
*/
Contact someone = new Contact();
someone.set("name", "kang");
someone.set("phone", "2323");
someone.set("mail", "dssdf@qq.com");
someone.set("qq", "2323");
System.out.println(someone);
System.out.println(someone.get("name")+
"qq是:"+someone.get("qq"));
Contact otherone = new Contact();
otherone.set("name", "苍老师");
otherone.set("phone", "23232");
System.out.println(otherone);
}
}
package day04;
/**
* 用户信息
* @author Administrator
*
*/
public class User {
private String username;
private String password;
public User(String username,String password){
super();
this.username = username;
package day04;
import java.util.HashMap;
import java.util.Map;
/**
* 用户业务逻辑类
* @author Administrator
*
*/
public class UserService {
private Map users = new HashMap();
/**
* 登陆方法
* username
* password
* return
*/
public User login(String username,String password){
/**
* 根据用户输入的用户名查询users
*/
User user = users.get(username);
//查看map中是否有这个用户
if(user == null){
throw new RuntimeException("没有该用户!");
}
/**
* 若有该用户。那么就判断用户输入的密码和User对象中
* 保存的该用户密码是否一致
*/
if(!user.getPassword().equals(password)){
throw new RuntimeException("密码输入错误!");
}
//用户名与密码都正确,就返回该用户信息
return user;
}
public static void main(String[] args) {
UserService service = new UserService();
/**
* 存入几个模拟数据
*/
service.users.put("Xiloer", new User("Xiaoer","32"));
service.users.put("Tom", new User("Tom","33223452"));
service.users.put("Killer", new User("Killer","32322"));
/**
* 测试登录
*/
User user = service.login("Xiloer", "32");
System.out.println(user.getUsername()+"登录成功!");
}
}
this.password = password;}public String getPassword(){return password;}public void setPassword(String passwod){this.password = password;}public String getUsername(){return username;}public void setUsername(){this.username = username;}}