Arrays.asList () массива

Ничто Важнейшее, я признаю, но я поймал людей использование StringBuffer для конкатенации Строк за пределами цикла в Java. Это было что-то простое как превращение

String msg = "Count = " + count + " of " + total + ".";

в

StringBuffer sb = new StringBuffer("Count = ");
sb.append(count);
sb.append(" of ");
sb.append(total);
sb.append(".");
String msg = sb.toString();

, Это раньше было довольно обычной практикой для использования техники в цикле, потому что это было в известной мере быстрее. Вещь, StringBuffer синхронизируется, таким образом, существует на самом деле дополнительно служебный, если Вы только связываете несколько Строк. (Не говоря уже о том, что различие абсолютно тривиально в этом масштабе.) Две других точки об этой практике:

  1. StringBuilder не синхронизируется, так должен быть предпочтен по StringBuffer в случаях, где Ваш код нельзя назвать от нескольких потоков.
  2. современные компиляторы Java превратят читаемую Конкатенацию строк в оптимизированный байт-код для Вас, когда это будет соответствующим так или иначе.
38
задан Community 23 May 2017 в 12:07
поделиться

8 ответов

" Комментарии к документации XML (Руководство по программированию на C #) В Visual C # вы можете создать документацию для своего кода, включив теги XML в специальные поля комментариев в исходном коде непосредственно перед блоком кода, на который они ссылаются. "

http://msdn.microsoft.com/en-us/library /b2s063f7.aspx

затем вы можете использовать Sandcastle для создания файлов chm, если хотите

http://www.hanselman.com/blog/SandcastleMicrosoftCTPOfAHelpCHMFileGeneratorOnTheTailsOfTheDeathOfNDoc.aspx

-121 --- 14129 ] _cancelled должен быть изменчивым . (если вы не выбрали блокировку)

Если один поток изменяет значение _cancelled , другие потоки могут не видеть обновленное результат.

Кроме того, я думаю, что операции чтения / записи _cancelled являются атомарными :

Раздел 12.6.6 спецификации CLI гласит: "A conforming CLI shall guarantee that read and write access to properly aligned memory locations no larger than the native word size is atomic when all the write accesses to a При рисовании пунктирных линий вы можете изменять расстояние между штрихами, чтобы убедиться, что у вас никогда не будет частичных четырехугольников на конечных точках. Это может визуально отвлекать, так как расстояние будет регулироваться в зависимости от длины сегмента.

edit:

Ах, картинка помогает. Я предполагаю, что, поскольку это на iPhone, вы получаете серию точек, из которых линии между ними дают приемлемую кривую. Если это так, использование примитивов сплайнов / кривых, вероятно, излишне. Я бы, вероятно, подошел к рисованию линий, как показано, просто путем рисования четырехугольников в каждой точке данных, которая находится на заданном расстоянии от последней точки данных.

Алгоритм будет примерно таким:

  1. Нарисовать четырехугольник на первой точке данных (с соответствующим поворотом)
  2. Перемещайтесь по списку точек, пока не «Я @ 190d11]" which means that you have actually constructed an ArrayList that contains int arrays.

    Your IDE and compiler should warn about unchecked assignments in that code. You should always use new ArrayList() or new ArrayList<>() instead of new ArrayList(). If you had used it, there would have been a compile error because of trying to pass List to the constructor.

    There is no autoboxing from int[] to Integer[], and anyways autoboxing is only syntactic sugar in the compiler, so in this case you need to do the array copy manually:

    public static int getTheNumber(int[] factors) {
        List<Integer> f = new ArrayList<Integer>();
        for (int factor : factors) {
            f.add(factor); // after autoboxing the same as: f.add(Integer.valueOf(factor));
        }
        Collections.sort(f);
        return f.get(0) * f.get(f.size() - 1);
    }
    
42
ответ дан 27 November 2019 в 03:35
поделиться

Вы пытаетесь преобразовать int [] в Integer [], это невозможно.

Вы можете использовать ArrayUtils commons-lang для преобразования целых чисел в целые числа перед получением списка из array:

public int getTheNumber(int[] factors) {
    Integer[] integers = ArrayUtils.toObject(factors);
    ArrayList<Integer> f = new ArrayList<Integer>(Arrays.asList(integers));
    Collections.sort(f);
    return f.get(0)*f.get(f.size()-1);
}    
9
ответ дан 27 November 2019 в 03:35
поделиться

есть две причины этого исключения:

1

Arrays.asList (факторы) возвращает список List , где факторы - это массив int

2

, вы забыли добавить параметр типа в:

ArrayList<Integer> f = new ArrayList(Arrays.asList(factors));

с:

ArrayList<Integer> f = new ArrayList<Integer>(Arrays.asList(factors));  

, что привело к ошибке времени компиляции :

found   : java.util.List<int[]>
required: java.util.List<java.lang.Integer>
8
ответ дан 27 November 2019 в 03:35
поделиться

Используйте java.utils.Arrays:

public int getTheNumber(int[] factors) {
    int[] f = (int[])factors.clone();
    Arrays.sort(f);
    return f[0]*f[(f.length-1];
}

Или, если вы хотите быть эффективным, избегайте выделения всех объектов, просто выполняйте работу:

public static int getTheNumber(int[] array) {
    if (array.length == 0)
        throw new IllegalArgumentException();
    int min = array[0];
    int max = array[0];
    for (int i = 1; i< array.length;++i) {
        int v = array[i];
        if (v < min) {
            min = v;
        } else if (v > max) {
            max = v;
        }
    }
    return min * max;
}
6
ответ дан 27 November 2019 в 03:35
поделиться

Я думаю, вы нашли пример, в котором автоматическая упаковка не работает. Поскольку Arrays.asList (T ... a) имеет параметр varargs, компилятор явно учитывает int [] и возвращает List с одним элементом в нем.

Вы должны изменить метод на этот:

public int getTheNumber(Integer[] factors) {
    ArrayList<Integer> f = new ArrayList<Integer>(Arrays.asList(factors));  
    Collections.sort(f);
    return f.get(0) * f.get(f.size() - 1);
}

и, возможно, добавить это для совместимости

public int getTheNumber(int[] factors) {
    Integer[] factorsInteger = new Integer[factors.length];
    for(int ii=0; ii<factors.length; ++ii) {
        factorsInteger[ii] = factors[ii];
    }

    return getTheNumber(factorsInteger);
}
2
ответ дан 27 November 2019 в 03:35
поделиться

Arrays.asList (factor) возвращает List , а не List . Поскольку вы выполняете new ArrayList вместо new ArrayList , вы не получаете ошибку компиляции для этого, но создаете ArrayList который содержит int [] , и затем вы неявно приводите этот arrayylist к ArrayList . Конечно, при первой попытке использовать одно из этих «Целых чисел» возникает исключение.

2
ответ дан 27 November 2019 в 03:35
поделиться

это из Java API "sort

public static void sort (Список списка) Сортирует указанный список в порядке возрастания в соответствии с естественным порядком его элементов. Все элементы в списке должны реализовывать интерфейс Comparable. Кроме того, все элементы в списке должны быть взаимно сопоставимы (то есть e1.compareTo (e2) не должен вызывать исключение ClassCastException для любых элементов e1 и e2 в списке) »

, это связано с реализацией интерфейса Comparable

0
ответ дан 27 November 2019 в 03:35
поделиться

Насколько я понимаю, функцию сортировки в классе коллекции можно использовать только для сортировки коллекций, реализующих сопоставимый интерфейс.

Вы предоставляете ей массив целых чисел. Вам, вероятно, следует обернуть это вокруг одного из известных классов Wrapper, таких как Integer. Целочисленные инструменты сопоставимы.

Прошло много времени с тех пор, как я работал над серьезным Java, однако чтение некоторых материалов по функции сортировки может помочь.

0
ответ дан 27 November 2019 в 03:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: