Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 33 34 35 36 37 38 39 40 41 [42]
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
mayton
Member

Откуда: loopback
Сообщений: 41020
asv79
Ну а если в тз этого нет,то зачем выдумавать огород-вам четко сказали что от вас хотят увидеть.

Напомни твой ответ по данной задаче.
21 апр 19, 12:57    [21868150]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
asv79
Member

Откуда: Тверь
Сообщений: 1322
mayton
asv79
Ну а если в тз этого нет,то зачем выдумавать огород-вам четко сказали что от вас хотят увидеть.

Напомни твой ответ по данной задаче.

Посмотри вверху там есть
21 апр 19, 13:09    [21868155]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3249
Озверин
Кстати, в целом, было интересной задачей отрефакторить метод так, чтобы не падал по стаковерфлоу.
Чет у вас, действительно, какое-то превратное понятие о рефакторинге.

1. удаляем логику из вывода
2. удаляет мусор из статических переменных
	public static void main(String args[]) {
		print(1, 10);
	}

	static boolean print(int from, int to) {
		System.out.println(from);
		boolean b = (from >= to || print(from + 1, to));
		return true;
	}

3. замечаем что LoC снизился, читаемость улучшилась
4. замечаем, что вместо глубины N нам достаточно log(N), получаем:
	public static void main(String args[]) {
		print(1, 10);
	}

	static boolean print(int from, int to) {
		System.out.println(from);
		int average = (from + 1 >> 1) + (to >> 1) + 1;
		boolean b = (from + 1 >= average || print(from + 1, average - 1));
		b = (average - 1 >= to || print(average, to));
		return true;
	}

5. поведение на границах разобрать самостоятельно
21 апр 19, 14:04    [21868187]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Мозговой_слизень
Member

Откуда:
Сообщений: 3008
Господа, я всю ветку не читал. А такое решение было?


        Deque<Integer> deque = new ArrayDeque<>();

        deque.offer(10);
        deque.offer(20);
        deque.offer(30);
        deque.offer(40);

        System.out.println("Reverse order:");

        for(Iterator descItr = deque.descendingIterator(); descItr.hasNext();) {
            System.out.println(descItr.next());
        }


        List<Integer> al = new LinkedList<Integer>();
        al.add(10);
        al.add(20);
        al.add(30);
        al.add(40);

        Collections.sort(al, Collections.reverseOrder());
        System.out.println("Reverse order :\n" + al);


Для ArrayList код такой же как для LinkedList.

Ну типа для каждого интерфейса есть метод, который позволяет порядок любой использовать. LinkedList имплементит два интерфейса (это и лист и очередь), следовательно менее эффективен чем "чистая" очередь (ArrayDeque). ArrayList позволяет обращаться к каждому элементу за постоянное время, независимо от размера. То есть, условно, самый оперативный при прочих равных будет ArrayList, затем ArrayDeque и потом LinkedList.
21 апр 19, 17:20    [21868257]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
Мозговой_слизень
Member

Откуда:
Сообщений: 3008
package one;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

class Item{
    private int id;
    private String name;
    public Item(int id, String name){
        this.id = id;
        this.name = name;
    }

    public Integer getId() {
        return id;     }

    public void setId(int id) {
        this.id = id;     }

    public String getName() {
        return name;     }

    public void setName(String name) {
        this.name = name;     }

    public String toString(){
        return name;     }
}


public class C1762 {

    public static void main(String[] args) {
        List<Item> l = Arrays.asList(
                new Item(1, "Screw"),
                new Item(2, "Nail"),
                new Item(3, "Bolt")
        );


     l.stream().sorted((a,b)->a.getId().compareTo(b.getId())).forEach(System.out::print);
     System.out.println();
     l.stream().sorted((a,b)->b.getId().compareTo(a.getId())).forEach(System.out::print); // REVERS ORDER




    }

}
7 июл 19, 20:40    [21922316]     Ответить | Цитировать Сообщить модератору
 Re: Задачка для собеседования : ArrayList vs LinkedList  [new]
mayton
Member

Откуда: loopback
Сообщений: 41020
Мозговой_слизень
Для ArrayList код такой же как для LinkedList.

Ну типа для каждого интерфейса есть метод, который позволяет порядок любой использовать. LinkedList имплементит два интерфейса (это и лист и очередь), следовательно менее эффективен чем "чистая" очередь (ArrayDeque). ArrayList позволяет обращаться к каждому элементу за постоянное время, независимо от размера. То есть, условно, самый оперативный при прочих равных будет ArrayList, затем ArrayDeque и потом LinkedList.

Такие задачи интреснее всего решать на Lisp. Там есть азарт игры со списками. В библиотеках Java с коллекциями
мы только соревнуемся в частном знании какого нибудь конкретного метода. Это скушно.

Задачка с перевёртышем списка мне почему-то напоминает головоломки Мартина Гарднера (?возможно) где
есть железнодорожная ветка и стоит задача перевернуть состав вагонов наоборот. Ну... ассоциации.
7 июл 19, 22:14    [21922329]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 33 34 35 36 37 38 39 40 41 [42]
Все форумы / Java Ответить