我对以下方法有点困惑 java.util.TreeMap:
static <K,V> TreeMap.Entry<K,V> successor(Entry<K,V> t) {
if (t == null)
return null;
else if (t.right != null) {
Entry<K,V> p = t.right;
while (p.left != null)
p = p.left;
return p;
} else {
Entry<K,V> p = t.parent;
Entry<K,V> ch = t;
while (p != null && ch == p.right) {
ch = p;
p = p.parent;
}
return p;
}
}
Run Code Online (Sandbox Code Playgroud)
此方法用于 TreeMap 的containsValue方法中。并告诉它检索第一个条目的后继和先前检索的后继的后继等。因此,上述方法检索整个 TreeMap 的条目。但我不太明白它是如何运作的,它如何寻找继任者?
谢谢!
我有一段代码,我试图用它按TreeMap降序对键进行排序,因为当我只使用 时TreeMap,它会根据按升序排列的键进行排序。我收到的错误是:
没有找到适合 TreeMap 的构造函数。
这是怎么回事?
import java.util.TreeMap;
import java.util.Map;
import java.util.Comparator;
import java.util.Map.Entry;
import java.util.SortedMap;
public class ChangeMachine {
public TreeMap<Double, Integer> dispenseChange(Double changeAmount, TreeMap<Double, Integer> coinsMap) {
TreeMap<Double, Integer> coinDispenserMap = new TreeMap<>();
for (Map.Entry<Double, Integer> coin : coinsMap.entrySet()) {
if (!(changeAmount > coin.getKey())) {
coinDispenserMap.put(coin.getKey(), 0);
continue;
}
int noOfCoins = (int) (changeAmount / coin.getKey());
coinDispenserMap.put(coin.getKey(), noOfCoins);
Double remainder = changeAmount % coin.getKey();
changeAmount = remainder;
if (changeAmount == 0.0) {
break;
} …Run Code Online (Sandbox Code Playgroud) 我想在 TreeMap 中存储键值对,并根据以下逻辑根据 Key 的值对条目进行排序:
按键的长度排序。如果两个键的长度相同,则按字母顺序对它们进行排序。例如,对于以下键值对。
IBARAKI MitoCity
TOCHIGI UtunomiyaCity
GUNMA MaehashiCity
SAITAMA SaitamaCity
CHIBA ChibaCity
TOKYO Sinjyuku
KANAGAWA YokohamaCity
Run Code Online (Sandbox Code Playgroud)
预期的输出是这样的。
CHIBA : ChibaCity
GUNMA : MaehashiCity
TOKYO : Sinjyuku
IBARAKI : MitoCity
SAITAMA : SaitamaCity
TOCHIGI : UtunomiyaCity
KANAGAWA : YokohamaCity
Run Code Online (Sandbox Code Playgroud) 为什么 Kotlin 中没有 TreeMap ?我知道我们可以使用 java utils 来使用 TreeMap,但这可能不是真正的原因。我们可以使用 HashMap 实现同样的目的吗?
这是相当荒谬的,我不确定为什么会发生这种情况,但每当我尝试使用.keySet或者.entrySet我在Eclipse中得到错误时都会为它创建一个新方法.
使用get方法获取值时, TreeMap将值打印为null,而它正常工作HashMap().请在下面找到示例代码并为此提供输入.
它适用于Hashmap,因为它使用equals()/hashcode()方法,而TreeMap是SortedMap,它不使用equals方法来比较两个对象.相反,它使用比较器/可比较来比较对象,但在使用get方法获取对象时,它将null作为响应.请在此提供一些清晰度.
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
class Employees implements Comparable<Employees>, Comparator<Employees> {
public Employees(String name, int id) {
super();
this.name = name;
this.id = id;
}
private String name;
private int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public …Run Code Online (Sandbox Code Playgroud) 我正在尝试HashMap使用LinkedHashMap和排序输出TreeMap.
当我用它TreeMap来理清HashMap它就像一个魅力.
Map<Integer, String> hMap = new HashMap<Integer, String>();
hMap.put(40, "d");
hMap.put(10, "a");
hMap.put(30, "c");
hMap.put(20, "b");
System.out.println(" ");
System.out.println("before");
for (Map.Entry m1 : hMap.entrySet()) {
System.out.print(m1.getKey() + " " + m1.getValue() + " ");
}
System.out.println("after");
Map<Integer, String> hTree = new TreeMap<Integer, String>(hMap);
for (Map.Entry m2 : hTree.entrySet()) {
System.out.print(m2.getKey() + " " + m2.getValue() + " ");
}
Run Code Online (Sandbox Code Playgroud)
输出:before
20 b 40 d 10 a 30 c …
可能重复:
TreeMap按值排序可以按值
的顺序迭代的Map
我有一个类型的TreeMap <String, Date>.我想通过日期(最近的第一)对它进行排序,我不能把它们作为密钥,因为我不能保证他们将是独一无二的.有没有办法做到这一点?