右侧:map.entrySet()是调用map对象的一个entrySet成员方法,把map转换成集合类型。
创新互联专业为企业提供叙州网站建设、叙州做网站、叙州网站设计、叙州网站制作等企业网站建设、网页设计与制作、叙州企业网站模板建站服务,10多年叙州做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
左侧:SetMap.EntryK,V entrySet是定义变量entrySet,其类型为一个集合,集合的元素类型是什么呢?是包围的Map.EntryK,V
没明白你问的第一个问题是什么意思,
第二个问题:this关键字指的是对象本身,this.drivername 指的是你在上面定义的全局变量drivername, “=”号后面的drivername是你SET方法里传递的参数名,传值过程就是调用这个SET方法的时候,会传递进来一个drivername参数,把这个drivername的值赋值给你定义的全局变量的drivername。换种写法你就能一目了然了,
public void setDrivername(String str) //这里的参数名改成str,
{
this.drivername=str;
}
1、面向接口(DAO)编程,接口的实现。
构建User.java实体类,构建UserImpl.java类,实现UserDao接口,构建MapDal.java,模拟数据库,Main.java模拟UI,UI只调用UserImpl,UserImpl调用MapDal。
main.java
package baidu.zhidao;
import java.util.*;
/**
* Main 主方法
* @author bufei
*
*/
public class Main {
public static void main(String[] args) {
int userNum = 9;
// 定义UserList
ListUser list = new ArrayListUser();
for (int i = 0; i userNum; i++) {
User user = new User();
user.setPassWord("passWord" + i);
user.setUserName("userName" + i);
list.add(user);
}
// 实例化UserImpl
UserImpl userImpl = new UserImpl(list);
// 用户 张三 是否存在
String userName = "张三";
String passWord = "passWord";
User user = new User();
user.setUserName(userName);
user.setPassWord(passWord);
System.out.println("- - - baiduDemo - - -");
// 1、isExist(user)
System.out.println("查找用户 " + userName + "...");
if (userImpl.isExist(user)) {
System.out.println(userName + " 存在!");
} else {
System.out.println(userName + " 不存在!");
}
// 2、addUser
System.out.println("添加用户 " + userName + ",psw= " + passWord + " ...");
userImpl.addUser(user);
// 3、changePassword(userName)
System.out.println("修改密码...");
passWord = "zhangsanpasword";
if (userImpl.changePassword(userName, passWord)) {
System.out.println("修改成功!");
} else {
System.out.println("用户不存在!");
}
// 4 selectAll()
list = userImpl.selectAll();
System.out.println("获取全部User:");
for (User userItem : list) {
System.out.println(userItem.getUserName() + "," + userItem.getPassWord());
}
}
}
UserImpl.java
package baidu.zhidao;
import java.util.*;
/**
* UserDao接口实现
* @author bufei
*
*/
public class UserImpl implements UserDao {
private MapDal mapDal;
/**
* 构造器,初始化Map数据库
*/
public UserImpl(ListUser list) {
mapDal = new MapDal(list);
}
/**
* 1.判断某个user是否存在
* @param user 用户对象
* @return 返回true/false用户是否存在
*/
public boolean isExist(User user) {
boolean rs = false;
rs = mapDal.isExist(user);
return rs;
}
/**
* 2.添加User
* 题目所给void 返回类型不合理
* @param user
*
* */
public void addUser(User user) {
if (mapDal.addUser(user)) {
System.out.println("添加完成!");
} else {
System.out.println("添加失败!");
}
}
/**
* 3.根据username修改password
* @param username
* @param password
* @return 成功与否
* */
public boolean changePassword(String userName, String password) {
boolean rs = false;
User user = new User();
user.setUserName(userName);
user.setPassWord(password);
rs = mapDal.changePassword(user);
return rs;
}
/**
* 根据用户对象修改密码
* @param user
* @return
*/
public boolean changePassword(User user) {
return mapDal.changePassword(user);
}
/**
* 4.得到所有的User,用List封装
* @return 从数据库查询到所有的User
* */
public ListUser selectAll() {
return mapDal.selectAll();
}
}
MapDal.java
package baidu.zhidao;
import java.util.*;
/**
* MapDml 用map模拟数据库,初始化生成一些User
* 单例模式,避免数据不同步
* @author bufei
*
*/
public class MapDal {
/** list中存map,实在绕得很,直接存User也是可以 */
public static ListMapString, String userMapList = new ArrayListMapString, String();
/**
* 初始化,有参构造器
* 构造Map map,存储全部的userName,passWord,模拟数据库
*
*/
public MapDal(ListUser list) {
for (User user : list) {
Map userMap = new HashMapString, String();
userMap.put(user.getUserName(), user.getPassWord());
userMapList.add(userMap);
}
}
/**
* 无参构造器
* */
public MapDal() {
}
/**
*
* @param user
* @return
*/
public boolean isExist(User user) {
boolean rs = false;
//遍历userMapList 查找用户是否存在
for (MapString, String map : userMapList) {
// 找到该map
if (map.get(user.getUserName()) != null) {
rs = true;
}
}
return rs;
}
/**
* addUser,userName已存在则无法加入
* @param user
* @return boolean
*/
public boolean addUser(User user) {
boolean rs = false;
//遍历userMapList 查找用户是否存在
for (MapString, String map : userMapList) {
// 找到该map,已经存在,无法添加
if (map.get(user.getUserName()) != null) {
return rs;
}
}
if (!rs) {
MapString, String userMap = new HashMapString, String(8);
userMap.put(user.getUserName(), user.getPassWord());
userMapList.add(userMap);
rs = true;
}
return rs;
}
/**
* deleteUser
* @return
*/
public boolean deleteUser() {
boolean rs = false;
return rs;
}
/**
* changePassword
* @param user
* @return
*/
public boolean changePassword(User user) {
boolean rs = false;
// 定义遍历索引
int i = 0;
//遍历userMapList 查找用户是否存在
for (MapString, String map : userMapList) {
// 找到该map,remove,再次存入新的
if (map.get(user.getUserName())!=null) {
userMapList.remove(i);
//hashmap 初试默认值 0.75-16
Map userMap = new HashMapString, String(8);
userMap.put(user.getUserName(), user.getPassWord());
userMapList.add(userMap);
rs = true;
}
i++;
}
return rs;
}
/**
* selectAll()
*
* @return 返回全体user
*/
public ListUser selectAll() {
ListUser list = new ArrayListUser();
//遍历map
for (MapString, String userMap : userMapList) {
User user = new User();
//map访问需要使用Map.Entry
//entry 需要Set.iterator().next()
Set entriSet = userMap.entrySet();
IteratorMap.EntryString, String iterator = entriSet.iterator();
if (iterator.hasNext()) {
// 此时entry 是 Object
Map.EntryString, String entry = iterator.next();
user.setUserName(entry.getKey().toString());
user.setPassWord(entry.getValue().toString());
list.add(user);
}
}
return list;
}
}
2、运行效果
这是因为你没有重写SetClass的equals和hashCode方法.
没有重写的时候,对象比较调用的是Object的equals方法,此时你new的每个人都是不同对象,及时名字和长度都一样,也不认为是一个对象.
eclipse为例,可以在文件上右键,自动生成这两个方法,生成的时候选择你需要判断equals的属性即可