Hashmap 升序排序
Hashmap Sorting in ascending order
public class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.setName("Lab");
dog1.setAge(3);
Dog dog2 = new Dog();
dog2.setName("Beagle");
dog2.setAge(1);
Dog dog3 = new Dog();
dog3.setName("Golden");
dog3.setAge(6);
Dog dog4 = new Dog();
dog4.setName("German");
dog4.setAge(4);
Dog dog5 = new Dog();
dog5.setName("Husky");
dog5.setAge(2);
List<Dog> dogList = new ArrayList<>();
dogList.add(dog1);
dogList.add(dog2);
dogList.add(dog3);
dogList.add(dog4);
dogList.add(dog5);
Collections.sort(dogList);
System.out.println(dogList);
List<Cat> catList = new ArrayList<>();
catList.add(new Cat("cat1", 2));
catList.add(new Cat("cat2", 6));
catList.add(new Cat("cat3", 7));
catList.add(new Cat("cat4", 4));
catList.add(new Cat("cat5", 3));
Collections.sort(catList);
System.out.println(catList);
Map<Integer, Integer> ageMap = new HashMap<>();
}
}
排序后,我想在 HashMap
- <Cat age, Dog age>
.
中插入以下键值对
假设列表 catList
和 dogList
都按年龄正确排序,地图可以用一个简单的循环填充。
for (int i = 0, n = Math.min(catList.size(), dogList.size()); i < n; i++) {
Cat cat = catList.get(i);
Dog dog = dogList.get(i);
ageMap.put(cat.getAge(), dog.getAge());
}
迭代器解决方案:
Iterator<Cat> itCat = catList.iterator();
Iterator<Dog> itDog = dogList.iterator();
while (itCat.hasNext() && itDog.hasNext()) {
ageMap.put(itCat.next().getAge(), itDog.next().getAge());
}
注意:为了保持 ageMap
中条目的顺序,最好将 HashMap
替换为按键排序的 TreeMap
,或者LinkedHashMap
维护插入顺序,但在我们的例子中,插入将是有序的。
Map<Integer, Integer> ageMap = new TreeMap<>();
这是在 java 8 中执行此操作的理想方法。如有任何语法错误,我们深表歉意。
List<Dog> dogList =
list.sort(Comparator.comparing(Dog::getAge));
List<Cat> catList =
list.sort(Comparator.comparing(Cat::getAge));
Map<Integer, Integer> ageMap = new HashMap<>();
int index= catList.size()-1;
if(dogList.size()==catList.size()){
dogList.forEach(dog -> {
ageMap.put(dog.getAge(), catList.get(index).getAge());
index--;
});
}
public class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.setName("Lab");
dog1.setAge(3);
Dog dog2 = new Dog();
dog2.setName("Beagle");
dog2.setAge(1);
Dog dog3 = new Dog();
dog3.setName("Golden");
dog3.setAge(6);
Dog dog4 = new Dog();
dog4.setName("German");
dog4.setAge(4);
Dog dog5 = new Dog();
dog5.setName("Husky");
dog5.setAge(2);
List<Dog> dogList = new ArrayList<>();
dogList.add(dog1);
dogList.add(dog2);
dogList.add(dog3);
dogList.add(dog4);
dogList.add(dog5);
Collections.sort(dogList);
System.out.println(dogList);
List<Cat> catList = new ArrayList<>();
catList.add(new Cat("cat1", 2));
catList.add(new Cat("cat2", 6));
catList.add(new Cat("cat3", 7));
catList.add(new Cat("cat4", 4));
catList.add(new Cat("cat5", 3));
Collections.sort(catList);
System.out.println(catList);
Map<Integer, Integer> ageMap = new HashMap<>();
}
}
排序后,我想在 HashMap
- <Cat age, Dog age>
.
假设列表 catList
和 dogList
都按年龄正确排序,地图可以用一个简单的循环填充。
for (int i = 0, n = Math.min(catList.size(), dogList.size()); i < n; i++) {
Cat cat = catList.get(i);
Dog dog = dogList.get(i);
ageMap.put(cat.getAge(), dog.getAge());
}
迭代器解决方案:
Iterator<Cat> itCat = catList.iterator();
Iterator<Dog> itDog = dogList.iterator();
while (itCat.hasNext() && itDog.hasNext()) {
ageMap.put(itCat.next().getAge(), itDog.next().getAge());
}
注意:为了保持 ageMap
中条目的顺序,最好将 HashMap
替换为按键排序的 TreeMap
,或者LinkedHashMap
维护插入顺序,但在我们的例子中,插入将是有序的。
Map<Integer, Integer> ageMap = new TreeMap<>();
这是在 java 8 中执行此操作的理想方法。如有任何语法错误,我们深表歉意。
List<Dog> dogList =
list.sort(Comparator.comparing(Dog::getAge));
List<Cat> catList =
list.sort(Comparator.comparing(Cat::getAge));
Map<Integer, Integer> ageMap = new HashMap<>();
int index= catList.size()-1;
if(dogList.size()==catList.size()){
dogList.forEach(dog -> {
ageMap.put(dog.getAge(), catList.get(index).getAge());
index--;
});
}