按Java键对HashMap排序
我试图创建一个HashMap,其中键(按Java键对HashMap排序,java,Java,我试图创建一个HashMap,其中键(intid)是通过查找前面的数字+1来确定的 我对java比较陌生,我在其他文章中看到的例子看起来很混乱 我的现行守则: public class Office { private Map<Integer, Employee> employee = new HashMap<>(); /** * Constructor for objects of class Office */ public Off
intid
)是通过查找前面的数字+1来确定的
我对java比较陌生,我在其他文章中看到的例子看起来很混乱
我的现行守则:
public class Office
{
private Map<Integer, Employee> employee = new HashMap<>();
/**
* Constructor for objects of class Office
*/
public Office()
{
employee = new HashMap<>();
}
public void addOffice(int ID, String Name, String JobTitle, int Age, int Salary)
{
Employee e = new Employee(ID, Name, JobTitle, Age, Salary);
employee.put(ID, e);
}
public int getID()
{
#find info
}
}
我看过甲骨文的网站,但对它一无所知
谢谢,
Sam如果您只需要一个唯一的ID作为密钥,您可以使用系统时间戳,例如从
system.CurrentTimeMillis()
。或者您甚至可以通过调用java.util.UUID.randomuid()
来使用随机生成的UIID
如果您仍然想要增量键,那么您必须创建一个方法,该方法尝试查找最大键值并将其增量。
这是一个相关的问题:
如果您的类同时被多个线程使用,请注意线程安全。如果您只需要一个唯一的ID作为密钥,则可以使用系统时间戳,例如从
system.CurrentTimeMillis()
。或者您甚至可以通过调用java.util.UUID.randomuid()
来使用随机生成的UIID
如果您仍然想要增量键,那么您必须创建一个方法,该方法尝试查找最大键值并将其增量。
这是一个相关的问题:
如果您的类同时被多个线程使用,请注意线程安全。如果您不需要删除员工,您可能只需要为此使用一个列表:
public class Office
{
private final List<Employee> employees = new LinkedList<>(); //or ArrayList
public Office()
{
// do nothing
}
// FYI variables should start with a lowercase character
public void addOffice(String name, String jobTitle, int age, int salary)
{
Employee e = new Employee(employees.size(), name, jobTitle, age, salary);
employees.add(e);
}
}
公共班级办公室
{
private final List employees=new LinkedList();//或ArrayList
公职()
{
//无所事事
}
//仅供参考,变量应以小写字符开头
public void addOffice(字符串名称、字符串职务、整数年龄、整数工资)
{
员工e=新员工(employees.size()、姓名、职称、年龄、工资);
增加(e);
}
}
如果不需要删除员工,您可能只需要使用一个列表:
public class Office
{
private final List<Employee> employees = new LinkedList<>(); //or ArrayList
public Office()
{
// do nothing
}
// FYI variables should start with a lowercase character
public void addOffice(String name, String jobTitle, int age, int salary)
{
Employee e = new Employee(employees.size(), name, jobTitle, age, salary);
employees.add(e);
}
}
公共班级办公室
{
private final List employees=new LinkedList();//或ArrayList
公职()
{
//无所事事
}
//仅供参考,变量应以小写字符开头
public void addOffice(字符串名称、字符串职务、整数年龄、整数工资)
{
员工e=新员工(employees.size()、姓名、职称、年龄、工资);
增加(e);
}
}
为什么不使用?(TreeMap implements)谢谢@Michael那么我怎么能提取最后一个键
值?如果你想要一个1->{a},2->{b},3->{c}
的映射,那不就是一个列表吗…?@SCramphorn我已经添加了一个答案。你为什么不使用?(TreeMap implements)谢谢@Michael,那么我如何提取最后一个键
值呢?如果你想要一个1->{a},2->{b},3->{c}
的映射,这不只是一个列表吗?@SCramphorn我已经添加了一个答案。这两个都容易受到随机冲突的影响。这不是一个好的解决方案。UUID不能有冲突,当前时间戳-如果不经常使用map,可能是一个解决方案,即仅在用户的actionUUID上最肯定会有冲突,这是不可能的。在Java中,可以表示的整数或long数可能太多了,所以如果您经常调用UUID,这是不可避免的。仅仅增加计数器和使用UUID之间的关键区别在于,达到计数器的最大限制是可预测的,而获得UUID冲突则不是。这两者都容易受到随机冲突的影响。这不是一个好的解决方案。UUID不能有冲突,当前时间戳-如果不经常使用map,可能是一个解决方案,即仅在用户的actionUUID上最肯定会有冲突,这是不可能的。在Java中,可以表示的整数或long数可能太多了,所以如果您经常调用UUID,这是不可避免的。仅仅增加计数器和使用UUID之间的关键区别在于,达到计数器的最大限制是可以预测的,而获得UUID冲突则不是。谢谢@Michael。最后一个问题,“Final”的意义在于与c#中的const
相同?我对c#不熟悉,但可能。这意味着变量只能指向一个对象。在这种情况下,它永远不会指向另一个列表。一个对象可能会改变(例如,添加或从列表中删除),因此说它是“常量”并不正确。更确切地说,它是对一个对象的恒定引用,这个对象可能是恒定的,也可能不是恒定的。谢谢@Michael。最后一个问题,“Final”的意义在于与c#中的const
相同?我对c#不熟悉,但可能。这意味着变量只能指向一个对象。在这种情况下,它永远不会指向另一个列表。一个对象可能会改变(例如,添加或从列表中删除),因此说它是“常量”并不正确。相反,它是对一个对象的常量引用,这个对象可能是常量,也可能不是常量。