Сортировка 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"

Сравнивайте числа

→ Ссылка