Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / полиморфизм. / 9 сообщений из 9, страница 1 из 1
20.04.2014, 11:55
    #38619760
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
полиморфизм.
Что-то запутался.

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

obj.method1.method2;

влияет ли obj на то, какой method2 (и внутри него) вызовется?
...
Рейтинг: 0 / 0
20.04.2014, 12:23
    #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
20.04.2014, 15:39
    #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
20.04.2014, 15:46
    #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
20.04.2014, 17:21
    #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
20.04.2014, 21:11
    #38619884
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
полиморфизм.
Usman,

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

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

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

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

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

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


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