gpt4 book ai didi

java - 使用 compareTo() 方法按字母顺序对列表进行排序

转载 作者:搜寻专家 更新时间:2023-10-31 20:11:10 28 4
gpt4 key购买 nike

我正在用 java 编写一个电话簿程序,我需要按字母顺序列出列表中的人,为此我需要为 java 中的列表编写一个排序算法,它应该只使用 compareTo() 方法。那么有人可以帮助我做到这一点吗?

public void listAlpha()
{
Node tempNode = head;

for(int i = 0; i <= size; i++)
{
for(int j = 0; j <= i; j++)
{
int comparison = ((tempNode.getNext().getElement().getName()).compareTo(tempNode.getElement().getName()));
if(comparison < 0)
{
Person tempPerson = tempNode.getElement();

tempNode.setElement(tempNode.getNext().getElement());
tempNode.getNext().setElement(tempPerson);
tempNode = tempNode.getNext();
}
}


}

(顺便说一句,这是一个家庭作业,我正在使用我自己的数据结构。)

这是我上面写的方法所属的类:

import java.util.*;

/** Singly linked list implementation .*/
public class SLinkedList<E> implements LinkedList<E>, Iterable<E> {
protected Node<E> head; // head node of the list
protected Node<E> tail; // tail node of the list
protected int size; // number of nodes in the list

public Iterator<E> iterator()
{
return new LinkedListIterator(head);
}

/** Default constructor that creates an empty list */
public SLinkedList() {
head = null;
tail = null;
size = 0;
}

public int size() {
return size;
}

public boolean isEmpty() {
return size == 0;
}

public void addFirst(E newElement) {
Node<E> newNode = new Node(newElement,null);
if(size == 0) //if list is empty
tail = newNode;

newNode.setNext(head);
head = newNode;
size++;
}

public void addLast(E newElement) {
Node<E> newNode = new Node(newElement,null);

if(size == 0) //if list is empty
head = newNode;

if (size != 0) //if list is not empty
tail.setNext(newNode);

tail = newNode;
size++;
}

public E removeFirst() {
Node<E> tempNode = null;
if (size != 0) {
if(size == 1)
tail = null;

tempNode = head;
head = head.getNext();
tempNode.setNext(null);
size--;
}

//if list is empty then return null
return tempNode.getElement();

}

public E removeLast() {
Node<E> tempNode = head;

if(size == 0)
return null;

if(size == 1) {
head = null;
tail = null;
size--;
return tempNode.getElement();
}

//size is greater than 1
for(int i=1; i<=size-2; i++) {
tempNode = tempNode.getNext(); //go to element that before the tail
}

Node<E> tempNode2 = tail;
tail = tempNode;
tail.setNext(null);
size--;
return tempNode2.getElement();

}

public void remove(E element){
int index = 0;
boolean found = false;
Node<E> temp = head;
for(int i=1; i<=size; i++) {//find the node with element
index++;
if(temp.getElement().equals(element)){
found = true;
break;
}
temp = temp.getNext();
}

if(found){
if(index == 1)
removeFirst();

else if(index == size)
removeLast();

else{
//find the previous node
Node<E> prev = head;
for(int i=1; i<index-1; i++) {
prev = prev.getNext();
}

prev.setNext(temp.getNext());
temp.setNext(null);
size--;
}
}
}

public int searchList(E searchKey) {
if(size == 0)
return -1;

Node tempNode = head;
for(int i=1; i<=size; i++) {
if(tempNode.getElement().equals(searchKey))
return i; //return index of the node
tempNode = tempNode.getNext();
}

return -1; //not found
}

public void printList() {
Node tempNode = head;
for(int i=1; i<=size; i++) {
System.out.print(tempNode.getElement());
if(i!=size) //if it is not last element
System.out.print(" - ");
tempNode = tempNode.getNext();
}
System.out.println();

}

人类:

public class Person
{
private String name;
private String surname;
private String address;
private PhoneNumber phone1;
private PhoneNumber phone2;
private PhoneNumber phone3;

public Person()
{
name = null;
surname = null;
address = null;
phone1.setPhone(0);
phone1.setType("");
phone2.setPhone(0);
phone2.setType("");
phone3.setPhone(0);
phone3.setType("");
}

public Person(String n, String s, String a,PhoneNumber p1, PhoneNumber p2, PhoneNumber p3)
{
name = n;
surname = s;
address = a;
phone1 = p1;
phone2 = p2;
phone3 = p3;

}

public String getName()
{
return name;
}

public void setName(String n)
{
name = n;
}
public String getSur()
{
return surname;
}

public void setSur(String s)
{
surname = s;
}

public void insertPhone(PhoneNumber phone)
{
if(phone2 == null)
phone2 = phone;
else if(phone3 == null)
phone3 = phone;
}

public PhoneNumber getPhone1()
{
return phone1;
}

public PhoneNumber getPhone2()
{
return phone2;
}

public PhoneNumber getPhone3()
{
return phone3;
}

public String getAdd()
{
return address;
}

public void setAdd(String a)
{
address = a;
}

最佳答案

您可以让您的Person 类实现Comparable,并定义以下方法:

    public class Person implements Comparable<Person> {

// Your previous code

public int compareTo(Person other) {
if (other == null) {
// throw exception for example
}
return this.name.toLowerCase().compareTo(other.name.toLowerCase());
}
}

关于java - 使用 compareTo() 方法按字母顺序对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27410241/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com