powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / полиморфизм.
9 сообщений из 9, страница 1 из 1
полиморфизм.
    #38619760
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то запутался.

Есть такой вызов:

obj.method1.method2;

влияет ли obj на то, какой method2 (и внутри него) вызовется?
...
Рейтинг: 0 / 0
полиморфизм.
    #38619766
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот чем навеян вопрос. Хочу по коду понять, почему LinkedHashSet при выводе в System.out.println выводит элементы в порядке добавления, а HashSet - в достаточно случайном.

метод toString у обоих коллекций один использует метод iterator.

Код: java
1.
2.
3.
 public Iterator<E> iterator() {
        return map.keySet().iterator();
    }


тут у нас разные мапы

метод keySet() у них снова одинаковый:

Код: java
1.
2.
3.
4.
public Set<K> keySet() {
        Set<K> ks = keySet;
        return (ks != null ? ks : (keySet = new KeySet()));
    }



допустим ks == null


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
private final class KeySet extends AbstractSet<K> {
        public Iterator<K> iterator() {
            return newKeyIterator();
        }
        public int size() {
            return size;
        }
        public boolean contains(Object o) {
            return containsKey(o);
        }
        public boolean remove(Object o) {
            return HashMap.this.removeEntryForKey(o) != null;
        }
        public void clear() {
            HashMap.this.clear();
        }
    }


метод newKeyIterator() в HashSet и LinkedHashSet разные я полагаю, что в этом ключ, но я не понимаю почему вызываются разные методы. Ведь класс KeySet по идее один и тот же создатся и для LinkedHashSet и HashSet.
...
Рейтинг: 0 / 0
полиморфизм.
    #38619812
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner, http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html This implementation differs from HashMap in that it maintains a doubly-linked list running through all of its entries.
...
Рейтинг: 0 / 0
полиморфизм.
    #38619814
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,

ну поддерживает и что? не значит же, что он так выводить будет.


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
class Parent {
    public static void main(String[] args) {
        new Parent().newInnerClass().myMethod();
        new Child().newInnerClass().myMethod();
    }

    public I newInnerClass() {
        return new InnerClass();
    }

    private final class InnerClass implements I {

        @Override
        public void myMethod() {
            System.out.println("parent inner class");
            foo();
        }
    }

    public void foo() {
        System.out.println("foo from parent");
    }


}

class Child extends Parent {
    public void foo() {
        System.out.println("foo from child");
    }
}

interface I {
    void myMethod();
}



вот вроде переписал код. только не совсем понимаю почему именно так работает
...
Рейтинг: 0 / 0
полиморфизм.
    #38619829
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
/**
 * The head of the doubly linked list.
 */
private transient Entry<K,V> header;

...

private abstract class LinkedHashIterator<T> implements Iterator<T> {
	...

	public boolean hasNext() {
		return nextEntry != header;
	}
}



...
Рейтинг: 0 / 0
полиморфизм.
    #38619884
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,

я знаю, что там как бы 2 адресации, но не понимаю к чему это
...
Рейтинг: 0 / 0
полиморфизм.
    #38619896
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerUsman,

я знаю, что там как бы 2 адресации, но не понимаю к чему этоДля сохранения порядка элементов (т.е. в порядке insertion-order).
А двусвязный он для того, чтобы не терять порядок уже
в самом списке (для итераций).

Короче говоря, LinkedHashMap = LinkedList + HashMap
...
Рейтинг: 0 / 0
полиморфизм.
    #38619943
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,

что-то я не понял про то зачем он двусвязный.
...
Рейтинг: 0 / 0
полиморфизм.
    #38619958
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerUsman,

что-то я не понял про то зачем он двусвязный.
Чтобы итераторы бегали в обе стороны.

Почитай ради интереса доходчивую статью на хабре
http://habrahabr.ru/post/129037/
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / полиморфизм.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]