Java 如何像其他排序列表一样对ArrayList进行排序?

Java 如何像其他排序列表一样对ArrayList进行排序?,java,android,arrays,string,arraylist,Java,Android,Arrays,String,Arraylist,我有两个ArrayLists。 其中一个是Double类型,包含距离。另一个是字符串类型,包含城市类型 以下是名单: private ArrayList<Double> distance_list = new ArrayList<Double>(); distance.add(123.43); distance.add(450.43); distance.add(230.65); private ArrayList<String> city_list = n

我有两个
ArrayList
s。 其中一个是
Double
类型,包含距离。另一个是
字符串
类型,包含城市类型

以下是名单:

private ArrayList<Double> distance_list = new ArrayList<Double>();
distance.add(123.43);
distance.add(450.43);
distance.add(230.65);

private ArrayList<String> city_list = new ArrayList<String>();
city_list.add("Munich");
city_list.add("Berlin");
city_list.add("Frankfurt");

Collections.sort(distance_list); //to get the closest distance first
private ArrayList distance_list=new ArrayList();
距离。加上(123.43);
距离。加上(450.43);
距离。加上(230.65);
private ArrayList city_list=new ArrayList();
城市列表。添加(“慕尼黑”);
城市列表。添加(“柏林”);
城市列表。添加(“法兰克福”);
集合。排序(距离列表)//首先获得最近的距离
如何按照匹配距离的相同顺序对城市列表进行排序?

NavigableMap
/
SortedMap
使用
地图
。映射以键值关系将两个项配对在一起。请求密钥以访问其价值合作伙伴

使用
NavigableMap
SortedMap
将钥匙按顺序放置

NavigableMapmap=newtreemap();
地图增补(123.43d,“慕尼黑”);
…
然后可以循环该地图。见:

for(双键:map.keySet())
{
字符串city=map.get(key);
System.out.println(城市+“=”+键);
}
下面是我制作的一个图表,概述了与Java11捆绑在一起的
Map
实现。您可以看到,首先添加了
SortedMap
接口,然后通过
NavigableMap
接口进行扩展


您需要创建一个类,该类将两个值配对并实现可比较的接口,例如:

public class City implements Comparable<City> {

    private Double distance;
    private String name;

    // constructor, getters, setters

    @Override
    public int compareTo(City city) {
        return (double)(this.distance - city.getDistance());
    }
}
公共类城市实施可比{
私人双倍距离;
私有字符串名称;
//构造函数、getter、setter
@凌驾
公共国际比较(城市){
return(double)(this.distance-city.getDistance());
}
}
然后构建一个树映射或其他一些映射类型来保持事物的有序性。我想您希望按距离排序

//Create TreeMap
TreeMap<Double, String> cities = new TreeMap();

//Add cities
cities.put(123.43, "Munich");
//创建树映射
树映射城市=新树映射();
//添加城市
城市。put(123.43,“慕尼黑”);
项目将按距离值排序


如果您需要更多帮助,请尝试并发布您的代码。

您可以通过两个步骤完成

  • 创建一个englobing类
    • 该类必须实现Compariable(在Collections.sort()中使用)
  • 然后使用集合进行排序。sort()
类距离城市实现可比性{
私人双倍距离;
私人城市;
公共距离城市(双倍距离,字符串城市){
这个距离=距离;
this.city=城市;
}
@凌驾
公共国际比较(距离城市o){
返回距离。比较(o.距离);
}
@凌驾
公共字符串toString(){
返回“DistanceCity{“+”distance=“+distance+”,city=”“+city+”}”;
}
}
私有数组列表;
liste=newarraylist();
新增(新距离城市(123.43,“慕尼黑”);
新增(新距离城市(450.43,“柏林”);
新增(新距离城市(230.65,“法兰克福”);
System.out.println(liste);//无序
//[DistanceCity{distance=123.43,city='慕尼黑'},DistanceCity{distance=450.43,city='柏林'},DistanceCity{distance=230.65,city='法兰克福'}]
Collections.sort(liste);
System.out.println(liste);//命令
//[DistanceCity{distance=123.43,city='Munich'},DistanceCity{distance=230.65,city='Frankfurt'},DistanceCity{distance=450.43,city='Berlin'}]
具有可比性和示例性的完整实现
或者,你可以在这里测试:

我建议你在一节课上练习一段距离和一个城市。该类将实现可比较的。让我知道如果你想在回答中有一个完整的代码城市和距离之间的关系是什么?他们应该保持成对吗?您可能想创建一个具有“城市名称”和“距离”属性的类。这些属性会让您感到惊讶。距离列表显示了与我家乡的距离。我想按距离对距离和城市进行排序,以知道哪个城市是壁橱,哪个是第二个壁橱…@MarekSchimmel完成了!谢谢你,一切顺利,欢迎你
class DistanceCity implements Comparable<DistanceCity>  {
    private Double distance;
    private String city;

    public DistanceCity(Double distance, String city) {
        this.distance = distance;
        this.city = city;
    }

    @Override
    public int compareTo(DistanceCity o) {
        return distance.compareTo(o.distance);
    }

    @Override
    public String toString() {
        return "DistanceCity{" + "distance=" + distance + ", city='" + city + "'}";
    }
}
private ArrayList<DistanceCity> liste;
liste = new ArrayList<>();
liste.add(new DistanceCity(123.43,"Munich"));
liste.add(new DistanceCity(450.43,"Berlin"));
liste.add(new DistanceCity(230.65,"Frankfurt"));

System.out.println(liste); // unordered
//[DistanceCity{distance=123.43, city='Munich'}, DistanceCity{distance=450.43, city='Berlin'}, DistanceCity{distance=230.65, city='Frankfurt'}]

Collections.sort(liste);

System.out.println(liste); // ordered
// [DistanceCity{distance=123.43, city='Munich'}, DistanceCity{distance=230.65, city='Frankfurt'}, DistanceCity{distance=450.43, city='Berlin'}]

class City implements Comparable<City>{
  public String name = null;
  public Double distance = 0.0;

  public City(String name, Double distance){
    this.name = name;
    this.distance = distance;
  }

  @Override
  public int compareTo(City o){
    return this.distance.compareTo( o.distance );
  }

  @Override
  public String toString(){
    return this.name;
  }

}


public class CitiesDemo{
  public static void main (String[] args ){
  City munich = new City("Munich", 123.43);
  City berlin = new City("Berlin", 450.43);
  City frankfurt = new City("Frankfurt", 230.65);

  java.util.List<City> cities = new java.util.ArrayList<City>();
  cities.add( munich );
  cities.add( berlin );
  cities.add( frankfurt );
  java.util.Collections.sort( cities );
  System.out.println( cities );
  }

}
~/ (main)$ javac CitiesDemo.java 

~/ (main)$ java CitiesDemo

[Munich, Frankfurt, Berlin]

~/ (main)$