Главная страница
Навигация по странице:

  • Дженереки не работают с примитивными типами.

  • PriorityQueue

  • Создание оконных приложений В Java для создания оконных приложений существует две библиотеки: библиотека

  • ООП. Заголовочные файлы, указатели, перегрузка операций и т д. Кроссплатформенность языка


    Скачать 60.07 Kb.
    НазваниеЗаголовочные файлы, указатели, перегрузка операций и т д. Кроссплатформенность языка
    Дата19.03.2021
    Размер60.07 Kb.
    Формат файлаdocx
    Имя файлаООП.docx
    ТипДокументы
    #186450
    страница3 из 4
    1   2   3   4

    toString() – метод, который возвращает значение класса Integer в виде объекта класса String

    Generics – «дженерики»

    Джериками принято называть параметризованные типы. Такие типы позволяют объявлять классы, интерфейсы и методы, где тип данных, с которыми они работают указывается в виде параметра.

    Таким образом, используя дженерики, можно создать единую структуру, которая будет автоматически работать с различными типами данных.

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

    Параметризированные классы

    public class Mas

    {

    private T [ ] arr; // Т – это некий параметр влияющий на поле

    Mas (T [ ] arr)

    {

    this.arr=arr.clone();

    }

    }

    public class Test

    {

    public static void main (String [ ] args)

    {

    Mas mi=new Mas <>(new Integer [ 5]);

    Mas md=new Mas <>(new Double [2]);

    T – обозначает имя параметра типа. Это имя используется в качестве заполнителя, вместо которого подставляется имя конкретного типа, передаваемого при создании экземпляра класса

    Параметр типа при объявлении всегда указывается в угловых скобках. Экземпляры параметризированного класса считаются экземплярами разных типов, если они созданы с разными параметрами.

    Дженереки не работают с примитивными типами.

    Обобщенный класс может быть объявлен с любым количеством параметров типа, тогда эти параметры перечисляются в угловых скобках через запятую

    public class TwoTypes

    {

    private T objT;

    private V objV;

    TwoTypes (T objT, V objV)

    {

    this.objT=objT;

    this.objV=objV;

    }

    TgetObjT()

    {

    return objT;

    }

    VgetObj()

    {

    return objV;

    }

    void print ()

    {

    S.o.p (“T.”+ objT.getClassgetName());

    S.o.p(“V.” + objv.getClassgetName());

    }

    }

    class Test

    {

    public static void main (String args [ ])

    {

    TvoTypes

    T=new TwoTypes <>

    (666, “Generics”);

    toprint();

    }

    }

    На параметр типа можно наложить ограничение сверху, т.е указать для параметра типа суперкласс, от которого должны быть унаследованы все аргументы типов при создании экземпляров данного класса

    Для ограничение типа параметра используется ключевое слово extends

    Class < Имя класса >< T extends <супер класс>>

    {



    }

    Тогда при создании экземпляра данного класса , в качестве значения параметра t можно передавать суперкласс либо его наследников

    Class Mas < T extends Number >

    {

    T [ ] arr ;

    Mas (T [ ]arr )

    {

    This.arr= arr.clone ();

    }

    Double sr()

    {

    Double s=0,0;

    }

    For (T var :arr)

    S+= val.double Value ();

    Return s/arr.leght ;

    }

    }

    Class Test

    {

    Public static void main (String [ ] args )

    {

    Integer [ ] m1 = n (1,2,3,4,5,6};

    Mas m1 = new Mass <> (m1);

    S.o.p(m1.sr ());

    Double [ ] m 2 = { 1.0,2.2,3.5,4.7,8.0};

    Mas < double > md = new Mas <> (m2);

    S.o.p(md.sr());

    String [] m3 = { «1»,»2»,»3»,};

    Mas ms = new Mas <> (m3);

    S.o.p(ms.sr ())

    }}

    В качестве ограничения можно указывать не только имя типа класса , но и имя интерфейса , тогда при создании экземпляра такого параметризированного класса в качестве фактического параметра ,можно передавать класс реализующий указанный интерфейс .

    В качестве ограничителя параметра можно использовать одновременно использовать класс и несколько интерфейсов . При этом имя класса всегда должно идти первым и между именами необходимо указать знак &.

    Class C

    Параметризированные методы .

    Если объявляется параметризированный класс , то его параметр не явно попадает во все его методы и поля , однако можно создать класс не использующий параметров , но при этом объявить в нем 1 или несколько методов , которых используется параметры типов .

    Class MyClass

    {

    Public static < T,V> boolean isIn (T t,V [ ] arr)

    {

    For (V elem : arr )

    If (t.equals (elem ))

    Return true ;

    Return false ;

    }

    Public static void main (String [ ] args)

    {

    Integer [ ] a = {1,2,3,4,5,6};

    If ( is In (2,a))

    S.o.p («2 входит в а «);

    If (! (is In (7,a)))

    S.o.p («7 не входит в а»);

    String [ ] b = { «1»,»2»,»3»};

    If (Is In («1»,b)

    s.o.p(«1входит в b «);

    }

    }

    Конструктор может быть параметризирован , даже если класс не является параметризирован )

    Class Myclass

    {

    Private double value ;

    Public < T extends Number > MyClass (T arg )

    {

    Value = arg.double Value ();

    }

    Void showValue ()

    {

    S.o.p(Value );

    }

    }

    Параметризированные интерфейсы

    Объявляются как параметризированные классы

    Public interface MyInterface < T>

    {

    T myMed (Tt);

    }

    Public class Myclass implements MyInterface

    Public T my Met (T t )

    {

    Return t ;

    }

    }

    Class Test

    {

    Public static void

    Main (String [ ] args)

    {

    MyInterface < String > p =new MyClass <> ();

    String s = p.myMet(«Hello»);

    }

    }

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

    Class MyClass < T>

    {

    T ob ;

    MyClass (Tob)

    {

    Ob = new T();

    }

    }

    Нельзя создавать массив спецэфических для обобщенного типа ссылок

    MyClass < integer > [ ] c = new Myclass < Integer > [ 10] ;

    Нельзя объявлять статические поля параметризированного типа

    Нельзя объявлять статические методы которые возвращают параметризированный тип

    Public static T

    Лекция 14.11.19

    Коллекции

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

    Коллекция – это структура данных, с разным способом доступа к данным, также организованная как класс.

    1. Collection – это коллекция, содержащая базовый набор для работы с данными.

    Базовый набор: добавление элемента или удаление элемента, поиск элемента

    1. Map – данный интерфейс описывает коллекцию, состоящую из значений “key-value”

    Каждому ключу соответствует только одно значение и это соответствует однозначному математическому отображению. Также коллекции, основанные на интерфейсе Map, называют словарями

    Интерфейс Interable , его наследник Collection

    Наследники Collection

    Первый наследник List

    Set

    Queue

    Методы интерфейса Collection

    1. size() – возвращает текущий результат коллекции (тип int)

    2. boolean is empty – возвращает true, когда коллекция пуста и false в ином случае

    3. boolean contains((Object o) - проверяет содержиться ли объект о в этой коллекции

    4. boolean add (E e) – добавляет элемент в коллекцию E и возвращает true, если элемент был добавлен. Если элемент нельзя добавить в коллекцию (ограничение на количество элементов), то возвращается false

    False может возвращаться в том случае, если мы пытаемся добавить уже существующий элемент в коллекцию, основанную На Set’e

    1. boolean remove (Object o) если элемент был удален true, а если коллекция не изменилась, то false

    2. Iterator iterator() -возвращает значение типа Итератор. Этот метод возвращает итератор, с помощью которого можно двигаться по элементам данной коллекции.

    Iterator - это интерфейс, содержащий три метода:

    Boolean hasNext() – возвращает true, если не достигнут конец коллекции и false, когда достигнут конец коллекции

    E next() – возвращает элемент, из которого состоит коллекция и перемещает итератор на следующий элемент коллекции.

    void remove() – позволяет удалить элемент, на котором стоит указатель

    Пример использования итератора:

    Class Test

    {

    Public static void main (String[] args)

    {

    ArrayList a = new ArrayList;

    for( int i=0; i<10; i++)

    a.add(i);

    Interator it=a.iterator();

    While(it.hasNext())

    {

    System.out.println(it.next());

    }

    }

    }

    Iterator iterator имеет ограниченный функционал, более широким функционалом обладает итератор, который называется ListIterator, который можно использовать с теми классами, которые реализует интерфейс List

    Дополнительные методы, которые появляются в ListIterator следующие:

    boolean hasPrevias() - возвращает true если в коллекции имеетcя предыидущий элемент и false если предыдущего элемента нет

    E previous()- возвращает текущий элемент и перемещает итератор на предыдущий элмент коллекции

    int nextIndex()

    int previousIndex()

    Эти методы позволяют получить номер текущего или предыдущего элемента.

    void set(E object) – позволяет изменить текущий элемент

    void add(E object)- позволяет добавить элемент после текущего элемента

    List , его наследники т.е классы

    ArrayList

    LinkedList

    ArrayList построен на основе массива, длина которого автоматически увеличивается при добавлении новых элементов, за счёт использования массива время доступа к элементу по индексу минимально.

    При удалении элемента из ArrayLis’a все элементы, находящиеся правее смещаются на одну позицию влево, но реальная размерность массива при этом не меняется

    LinkedList - это двусвязный список, который состоит из отдельных узлов. При этом доступ к элементу осуществляется за линейное время. За счет того что LinkedList хранит ссылку на первый и последний элемент, добавление в конец не занимает много времени.

    В целом по памяти по скорости ArrayList предпочтительнее

    Помимо всех методов интерфейса Collection, List – содержит собственные методы для работы с упорядоченными данными.

    Методы

    get(int t) – возвращает элемент коллекции по индексу

    void add (int t, E object) – можем добавить элемент object в коллекцию на позицию i

    void remove (int t) – удаляет элемент по индексу I

    E set( int t, E object)- заменяет элемент на указанную позицию и возвращает замененный элемент

    int index (Object o) – возвращает индекс заданного элемента на и i-1, если такого элемента нет

    ListIterator listIterator() – возвращает лист итератор

    List subList(int beg, int end – возвращает часть списка между двуми позициями

    Пример:

    LinkedListlist=new LinkedList();

    list.add(“abc”);

    list.add(“123”);

    list.add(“***”);

    ListIteratorit=list.listIterator();

    while( it.hasNext())

    S.o.p(it.next());

    it= =listIterator(list.size());

    while(it.hasPrevious())

    S.o.p(it.previous));

    Лекция 21.11.2019

    Интерфейс set

    set – это коллекция, которая не может содержать повторяющихся элементов. Интерфейс set содержит только методы, унаследованные от интерфейса Collection и добавляет в эти методы ограничения, чтобы эти элементы не дублировались.

    set накладывает более строгие ограничения на метод equals, и это позволяет сравнивать экземпляры set даже если они относятся к разным реализациям set’a.

    Экземпляры set считаются равными, если они содержат одинаковое количество элементов и сами элементы, одинаковы

    Реализация интерфейса Set

    1. HashSet - наиболее популярная реализация, которая основана на Hash – таблицах. В такой коллекции элементы не дублируются и не гарантирована сохраняется порядок элементов при обходе. В данной реализации обеспечивается константное время выполнения основных операций, даже для больших наборов данных



    1. LinkedHashSet - реализация на основе Hash – таблицы, в которую добавлены связи элементов как в списке. Поддерживается тот порядок элементов, который был при вставке. Время выполнения операции хуже чем у Hashset’a, однако оно является линейным.

    2. TreeSet - реализация на основе красно-черного дерева. Элементы хранятся в виде упорядоченного по значениям дерева. Работа с такими данными значительно медленнее чем HashSet и занимает логарифмическое время.

    С помощью set можно удалить дублирующеися элементы из любой коллекции.

    Например, если есть произвольная коллекция C, то можно вот таким способом получить коллекцию C1, в которой не будет повторяющихся элементов.

    Collection c1=new HashSet(c);

    Интерфейс очередь

    Методы интерфейса Queue (очередь)

    В этом интерфейсе существует по две версии каждого метода. Одна версия выбрасывает исключения, если операцию выполнить невозможно, а другая версия возвращает в этом случае специальное значение

    Исключение: Специальное значение:

    add(E elem) добавляют элемент offer(E elem)

    revome () удаляют элемент из очереди и возвращают удаленный элемент сначала poll ()

    element() возвращают головной элемент очерди, не удаляя это значение из очереди peek()

    Класс, который реализует интерфейс Queue называется PriorityQueue

    Пример:

    PriorityQueue q = new PriorityQueue ();

    Random r = new Random();

    for(int i=0; i<10; i++)

    q.add (r.nextInt(50)+1);

    while (!q.isEmpty())

    {

    System.Out.println(q.poll());

    }

    Интерфейс Deque (дек)

    Deque – это реализация очереди с двумя концами, т.е. это линейная коллекция элементов с возможностью добавления и удаления с обеих сторон. Стандартная реализация интерфейса Deque это класс ArrayDeque, у которого реализованы следующие методы:

    Исключения:

    1. AddFirst(E elem) добавление первого и последнего соответственно

    2. AddLast(e elem)

    3. removeFirst();

    4. removeLast;

    5. getFirst();

    6. getLast();

    Специальное значение:

    1)offerFirst(E elem)

    2) offerLast(E elem)

    3) pollFirst();

    4) pollLast();

    5) peekFirst();

    6) peekLast()

    Интерфейс Map

    interface Map

    K задает тип ключа, а V – задает тип хранимого значения

    С помощью Map’a можно хранить пары значений keyVallue, где ключ используется для извлечения элементов. Значение ключа не может дублироваться в пределах одной коллекции Map

    Методы интерфейса Map

    size() – возвращает размер текущего словаря

    isEmpty() – проверяет на пустоту

    containsKey(Object o) – входит ли ключ в заданную карту

    containsValue(Object o) – входит ли значение в заданную карту

    get(K key) – возвращает значение по ключу в виде элемента типа V

    put(K, key, V value) - добавить элемент в коллекцию

    remove(K key)- удаляет значение по ключу и возвращает удаленное значение

    Основные реализации Map’a

    1. HashMap – реализован на основе Hash – таблиц. За счёт реалзации интерфейса Map позволяет хранить пары Ключ-Значение. Самый быстрый доступ.

    2. LinkedMap – расширяет класс HashMap позволяя создавать связанный список элементов в карте. Это позволяет организовать перебор элементов в том порядке, в котором они вставлялись

    3. TreeMap – реализация интерфейса Map, где для хранения элементов применяется дерево

    Лекция 05.12.19

    Создание оконных приложений

    В Java для создания оконных приложений существует две библиотеки: библиотека AWT и библиотека Swing

    В библиотеке AWT содержаться средства для создания платформо-ориентированных приложений, а в библиотеке Swing содержаться средства для создания платформо-независимых оконных приложений.

    Окно верхнего уровня в Java принято называть фреймом, для фрейма в библиотеке AWT есть класс Frame, в библиотеке Swing есть класс JFrame.

    Класс JFrame расширяет класс Frame. Обычно Frame в Java служит контейнером для других компонент. Для того чтобы создать Frame, содержащий компоненты библиотеки Swing, необходимо определить класс, расширяющий класс JFrame.

    JFrame содержится в пакете javax.swing

    Основные методы класса JFrame, которые позволяют изменять внешний вид окна

    1. setTitle(String s) – позволяет установить строку s в качестве заголовка окна

    2. setIconImage(Image image) – берет объект класса Image и устанавливает его в качестве иконки

    3. setResizable(boolean b) – задает возможность изменения размеров окна

    4. dispose() – закрывает окно и освобождает все ресурсы, используемые этим окном

    Большинство методов для модификации окна содержаться в классе Component библиотеки AWT

    Основные методы класса Component

    1. setSize(int W, int h) – позволяет установить размеры component'a, в частности Fram’a.

    По умолчанию Frame имеет размеры о на 0, поэтому setSize является обязательным методом, который участвует в создании Fram’a

    1. setVisible(boolean b) – позволяет установить видимость для component’a. По умолчанию Frame считается не видимым, т.е false

    2. setEnabled(boolean b) – позволяет разрешит либо запретить доступ к component’у. Доступен по умолчанию

    3. isEnabled() – проверяет доступность component’a

    4. isShowing() – позволяет узнать, можно ли отобразить component

    5. Dimension gerSize() – возвращает размер окна в виде класса

    6. setBounds(int x, int y, int w, int h) – одновременно переносит component и устанавливает его размер

    Пример создания Fram’a:

    class MyFrame extends JFrame

    {

    final int WIDTH=800;

    final int HEIGHT=600;

    MyFrame()

    {

    setSize(WIDTH, HEIGHT);

    setTitle(“My first frame”);

    setVisible(true);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    }
    class Test

    {

    public static void main (String [ ] args)

    {

    MyFrame frame = new MyFrame();

    }

    }

    Создался пустой frame с заголовком.

    Для добавления некого component’a на Frame предназначен метод
    1   2   3   4


    написать администратору сайта