Сортировка ArrayList
package com.company;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
public class MySet<T>{
private final int max_size=1024;
private final ArrayList<Object> mas=new ArrayList<>(max_size);
public ArrayList<Object> getMas() {
return mas;
}
public int getSize(){
return mas.size();
}
public void add(T elem){
if(mas.size()==0) mas.add(elem);
else {
for (int i = 0; i < mas.size(); i++) {
if (mas.get(i)==elem) return;
}
mas.add(elem);
}
}
public void remove(T elem){
for(int i=0;i<mas.size();i++){
if(mas.get(i)==elem) {
mas.remove(i);
break;
}
}
}
public boolean check(T elem){
for(int i=0;i<mas.size();i++){
if(mas.get(i)==elem) {
return true;
}
}
return false;
}
public static MySet Union(MySet set1,MySet set2){
MySet newSet=new MySet<>();
for(int i=0;i<set1.getSize();i++){
newSet.add(set1.getMas().get(i));
}
for(int i=0;i<set2.getSize();i++){
newSet.add(set2.getMas().get(i));
}
return newSet;
}
public static MySet Intersection(MySet set1,MySet set2){
MySet newSet=new MySet<>();
for(int i=0;i<set2.getSize();i++){
if(set1.check(set2.getMas().get(i))) newSet.add(set2.getMas().get(i));
}
return newSet;
}
public void show(){
Collections.sort(mas, new Comparator<Object>() {
public int compare(Object o1, Object o2) {
return o1.toString().compareTo(o2.toString());
}
});
for(int i=0;i<mas.size();i++){
System.out.println(mas.get(i));
}
System.out.println();
}
public static void main(String[] args) {
MySet<Integer> set1=new MySet<>();
MySet<Integer> set2=new MySet<>();
set1.add(5);
set1.add(4);
set1.add(3);
set1.add(15);
set1.show();
set2.add(9);
set2.add(11);
set2.add(15);
set2.add(3);
set2.show();
MySet.Union(set1,set2).show();
MySet.Intersection(set1,set2).show();
}
}
Сделал простенькую реализацию множества. Хотел применить сортировку при выводе элементов,но что-то пошло не так и сортирует он как-то странно. В main у меня два множества, объединение и пересечение. Вывод:
15 3 4 5
11 15 3 9
11 15 3 4 5 9
15 3
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Так вы же используете лексикографическое сравнение строк return o1.toString().compareTo(o2.toString());, а для строк "15" < "3"
Сравнивайте числа