我有一个物体的Arraylist.这些对象具有属性或数据类型 - 'String'.我需要按字符串对Arraylist进行排序.怎么做到这一点?
如果我有一个我想要排序的元素列表,Java提供了两种方法来解决这个问题.
例如,假设我有一个Movie对象列表,我想按标题对它们进行排序.
我可以这样做的一种方法是通过调用静态java.util.Collections.sort()方法的单参数版本,并将我的电影列表作为单个参数.所以我会调用Collections.sort(myMovieList).为了使其工作,必须声明Movie类以实现java.lang.Comparable接口,并且必须在此类中实现所需的方法compareTo().
另一种排序方法是使用影片列表和java.util.Comparator对象作为参数调用静态java.util.Collections.sort()方法的双参数版本.我会调用Collections.sort(myMovieList,titleComparator).在这种情况下,Movie类不会实现Comparable接口.相反,在构建和维护影片列表本身的主类中,我将创建一个实现java.util.Comparator接口的内部类,并实现一个必需的方法compare().然后我将创建此类的实例并调用sort()的双参数版本.第二种方法的好处是您可以创建无限数量的这些内部类比较器,因此您可以以不同的方式对对象列表进行排序.在上面的例子中,
我的问题是,为什么麻烦学习两种方式在Java中进行排序,当Collections.sort()的双参数版本执行第一个单参数版本所做的所有事情时,还有一个额外的好处就是能够对列表的元素进行排序基于几个不同的标准?在编码时必须记住这一点.你有一个基本机制,用Java来排序列表来了解.
我想根据其键值plz对地图进行排序,请参阅下面的代码
public static void main(String[] args) {
SortedMap map = new TreeMap();
// Add some elements:
map.put("2", "Two");
map.put("1", "One");
map.put("5", "Five");
map.put("4", "Four");
map.put("3", "Three");
map.put("10", "Ten");
map.put("12", "Twelve");
map.put("7", "Seven");
map.put("9", "Nine");
Iterator iterator = map.keySet().iterator();
while (iterator.hasNext()) {
Object key = iterator.next();
System.out.println("key : " + key + " value :" + map.get(key));
}
}
Result Should come below
key : 1 value :One
key : 2 value :Two
key : 3 value :Three
key : 4 …Run Code Online (Sandbox Code Playgroud) 我正在努力熟悉收藏.我有一个String,它是我的密钥,电子邮件地址和Person对象(firstName,lastName,电话,电子邮件).我在Sun的网页上的Java集合章节中读到,如果你有一个HashMap并希望它被排序,你可以使用TreeMap.这种排序如何运作?它是基于Person类中的compareTo()方法吗?我覆盖了Person类中的compareTo()方法以按lastName排序.但它不能正常工作,并且想知道我是否有正确的想法.这段代码底部的getSortedListByLastName是我尝试转换为TreeMap的地方.此外,如果这是正确的方法,或者正确的方法之一,我如何按firstName排序,因为我的compareTo()是通过lastName进行比较.
import java.util.*;
public class OrganizeThis
{
/**
Add a person to the organizer
@param p A person object
*/
public void add(Person p)
{
staff.put(p.getEmail(), p);
//System.out.println("Person " + p + "added");
}
/**
* Remove a Person from the organizer.
*
* @param email The email of the person to be removed.
*/
public void remove(String email)
{
staff.remove(email);
}
/**
* Remove all contacts from the organizer.
*
*/
public void empty()
{
staff.clear();
}
/**
* …Run Code Online (Sandbox Code Playgroud) 可能重复:
Java对象默认为toString
为什么当我从文件阅读器打印我的列表时,它是[myServiceOrder @ 3bc1cac,myServiceOrder @ 32fe621e,myServiceOrder @ 5adbb9b9,myServiceOrder @ f7e4f49,myServiceOrder @ 2d874991,myServiceOrder @ ceee5f1,myServiceOrder @ 183a37d9]
public class myServiceOrder implements ServiceOrder, Comparable<myServiceOrder>{
private int number=0;
private String ownerName="";
private String make="";
private String model="";
private int year=0;
public myServiceOrder(int number, String ownerName, String make, String model, int year) {
this.number=number;
this.ownerName=ownerName;
this.make=make;
this.model=model;
this.year=year;
}
public myServiceOrder() {
// TODO Auto-generated constructor stub
}
@Override
public void setOrderNum(int orderNumber) {
number=orderNumber;
}
@Override
public void setYear(int year) {
this.year=year; …Run Code Online (Sandbox Code Playgroud) 我是Java的新手,我正在尝试理解比较器接口.我尝试了以下代码:
package comparator;
import java.io.*;
import java.util.*;
public class comparator {
public static void main(String args[]){
bankAccount[] ba=new bankAccount[500];
ba[0]=new bankAccount(50);
ba[1]=new bankAccount(90);
ba[2]=new bankAccount(20);
Comparator c=new comparing();
System.out.println(c.compare(ba[0], ba[1]));
Arrays.sort(ba, c);
}
}
class bankAccount{
public bankAccount(double bal){
balance=bal;
}
public double balance;
}
class comparing implements Comparator{
public int compare(Object first, Object second){
bankAccount ba1=(bankAccount)first;
bankAccount ba2=(bankAccount)second;
int retval;
if(ba1.balance<ba2.balance){
retval=-1;
}
else if(ba1.balance>ba2.balance){
retval=1;
}
else{
retval=0;
}
return retval;
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
Exception in thread "main" …Run Code Online (Sandbox Code Playgroud) 所以我必须写一个java代码:
我知道Java Character类有方法isLowerCase(),isUpperCase,toLowerCase()和toUpperCase(),你可以用它们逐个字符地查看字符串.如果第一个字符是小写,则将其转换为大写,对于每个后续字符,如果字符为大写,则将其转换为小写.
问题是我如何检查每封信?它应该包含什么样的变量和字符串?你能帮忙吗?
java ×7
sorting ×3
collections ×2
string ×2
arraylist ×1
comparable ×1
comparator ×1
title-case ×1