Www.javacup.ir Sadegh Aliakbary. Copyright ©2014 JAVACUP.IRJAVACUP.IR All rights reserved. Redistribution of JAVACUP contents is not prohibited if JAVACUP.

Slides:



Advertisements
Similar presentations
Introduction to Computation and Problem Solving Class 32: The Java® Collections Framework Prof. Steven R. Lerman and Dr. V. Judson Harward.
Advertisements

Transparency No. 1 Java Collection API : Built-in Data Structures for Java.
Sets and Maps Part of the Collections Framework. 2 The Set interface A Set is unordered and has no duplicates Operations are exactly those for Collection.
Collections CS3250. Sources  Slides by Professor Chuck Allison  Core Java, by Cay S. Horstmann and Gary Cornell  The Java Tutorial 
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with Java From Control Structures through Data Structures by.
Sadegh Aliakbary. Copyright ©2014 JAVACUP.IRJAVACUP.IR All rights reserved. Redistribution of JAVACUP contents is not prohibited if JAVACUP.
Sadegh Aliakbary. Copyright ©2014 JAVACUP.IRJAVACUP.IR All rights reserved. Redistribution of JAVACUP contents is not prohibited if JAVACUP.
Sadegh Aliakbary. Copyright ©2014 JAVACUP.IRJAVACUP.IR All rights reserved. Redistribution of JAVACUP contents is not prohibited if JAVACUP.
An Array-Based Implementation of the ADT List public class ListArrayBased implements ListInterface { private static final int MAX_LIST = 50; private Object.
15-Jun-15 Lists in Java Part of the Collections Framework.
Professor Evan Korth (adapted from Sun’s collections documentation)
Algorithm Programming Containers in Java Bar-Ilan University תשס " ו by Moshe Fresko.
What Is a Collection?  A collection (sometimes called a container) is simply an object that groups multiple elements into a single unit.  Collections.
24-Jun-15 Introduction to Collections. 2 Collections A collection is a structured group of objects Java 1.2 introduced the Collections Framework Collections.
1 The Collection Interface public interface Collection extends Iterable { boolean add(E e); boolean addAll(Collection c); void clear(); boolean contains(Object.
Sets and Maps Nelson Padua-Perez Bill Pugh Department of Computer Science University of Maryland, College Park.
Unit 291 Java Collections Framework: Interfaces Introduction to the Java Collections Framework (JCF) The Comparator Interface Revisited The Collection.
Collections The objectives of this chapter are: To outline the Collections infrastructure in Java To describe the various collection classes To discuss.
05 - Containers DRAFT COPY © S. Uchitel, 2004 Container OrderedDuplicates BagsNOYES SetsNONO ListsYESYES MapsNO.
Lists in Java Part of the Collections Framework. Kinds of Collections Collection --a group of objects, called elements –Set-- An unordered collection.
12-Jul-15 Lists in Java Part of the Collections Framework.
The Collections Framework A Brief Introduction. Collections A collection is a structured group of objects –An array is a kind of collection –A Vector.
CSE 143 Lecture 7 Sets and Maps reading: ; 13.2 slides created by Marty Stepp
Sadegh Aliakbary. Copyright ©2014 JAVACUP.IRJAVACUP.IR All rights reserved. Redistribution of JAVACUP contents is not prohibited if JAVACUP.
SEG4110 – Advanced Software Design and Reengineering TOPIC G Java Collections Framework.
Sets and Maps Part of the Collections Framework. The Set interface A Set is unordered and has no duplicates Operations are exactly those for Collection.
Sadegh Aliakbary. Copyright ©2014 JAVACUP.IRJAVACUP.IR All rights reserved. Redistribution of JAVACUP contents is not prohibited if JAVACUP.
Sadegh Aliakbary. Copyright ©2014 JAVACUP.IRJAVACUP.IR All rights reserved. Redistribution of JAVACUP contents is not prohibited if JAVACUP.
Sadegh Aliakbary Sharif University of Technology Fall 2010.
Recitation 1 CS0445 Data Structures Mehmud Abliz.
Collections in Java. Kinds of Collections Collection --a group of objects, called elements –Set-- An unordered collection with no duplicates SortedSet.
(c) University of Washington14-1 CSC 143 Java Collections.
Generalized Containers CSIS 3701: Advanced Object Oriented Programming.
Sadegh Aliakbary Sharif University of Technology Fall 2010.
Chapter 18 Java Collections Framework
1 TCSS 143, Autumn 2004 Lecture Notes Java Collection Framework: Maps and Sets.
תוכנה 1 תרגול 8 – מבני נתונים גנריים. 2 Java Collections Framework Collection: a group of elements Interface Based Design: Java Collections Framework.
1/20/03A2-1 CS494 Interfaces and Collection in Java.
Collections in Java. 2 Collections Hierarchy > ArrayListVector Stack LinkedList > Arrays Collections.
1.0tCopyright © 1998 Purple Technology, Inc. 1 Java Collections Framework Authored by Alex Chaffee Copyright © 1998 Purple Technology, Inc. All rights.
The Java Collections Framework Based on
3-February-2003cse Collections © 2003 University of Washington1 Java Collections CSE 403, Winter 2003 Software Engineering
Java 2 Collections Bartosz Walter Software Engineering II.
1 Collections Framework A collections framework is a unified architecture for representing and manipulating collections. All collections frameworks contain:
Sadegh Aliakbary. Copyright ©2014 JAVACUP.IRJAVACUP.IR All rights reserved. Redistribution of JAVACUP contents is not prohibited if JAVACUP.
Sadegh Aliakbary Sharif University of Technology Fall 2012.
Collections Mrs. C. Furman April 21, Collection Classes ArrayList and LinkedList implements List HashSet implements Set TreeSet implements SortedSet.
CS Ananda Gunawardena.  A collection (sometimes called a container) is simply an object that groups multiple elements into a single unit.  Collections.
Sadegh Aliakbary. Copyright ©2014 JAVACUP.IRJAVACUP.IR All rights reserved. Redistribution of JAVACUP contents is not prohibited if JAVACUP.
Sets and Maps Part of the Collections Framework. 2 The Set interface A Set is unordered and has no duplicates Operations are exactly those for Collection.
CMSC 202 Containers and Iterators. Container Definition A “container” is a data structure whose purpose is to hold objects. Most languages support several.
1 Copyright © 2011 Tata Consultancy Services Limited COLLECTIONS By TEAM 5 Rajendhiran Sivan Christi Yashwanth Bijay Smruthi Satyajit.
4-Mar-16 Introduction to Collections. Revision questions True false questions 0 for False 1 for True Please do not answer anything other than the above.
Collections Dwight Deugo Nesa Matic
Sadegh Aliakbary. Copyright ©2014 JAVACUP.IRJAVACUP.IR All rights reserved. Redistribution of JAVACUP contents is not prohibited if JAVACUP.
 2016, Marcus Biel, ArrayList Marcus Biel, Software Craftsman
Java Collections OOP tirgul No
Advanced Programming in Java
Advanced Programming in Java
Advanced Programming in Java
Introduction to Collections
ظرف‌ها و ساختمان‌های داده Containers and Data Structures
Introduction to Collections
Introduction to Collections
Introduction to Collections
Part of the Collections Framework
Collections in Java The objectives of this lecture are:
Advanced Programming in Java
Introduction to Collections
Introduction to Collections
Presentation transcript:

Sadegh Aliakbary

Copyright ©2014 JAVACUP.IRJAVACUP.IR All rights reserved. Redistribution of JAVACUP contents is not prohibited if JAVACUP is clearly noted as the source in the used case. JAVACUP shall not be liable for any errors in the content, or for any actions taken in reliance thereon. Please send your feedback to 2JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source

Agenda Containers Collection Set Map LinkedList Iterator JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source3

JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source4

Array Suppose we have an array of students Student[] students = new Student[34]; What if we do not know the array size? A default initial size What if we want to add more students to array? Double the size of array Copy old elements What if we want to remove some students from array? Nullify the element & shift the others We need a dynamic array JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source5

Imagine if arrays was sth like: Student[] students = new Student[0]; students.add(new Student("Ali Alavi")); students.add(new Student("Taghi Taghavi")); System.out.println(students[1]); students.remove(0); But arrays are not so cute! JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source6

ArrayList Java introduces Collection classes for this purpose ArrayList students = new ArrayList(); students.add(new Student("Ali Alavi")); students.add(new Student("Taghi Taghavi")); students.remove(0); JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source7

Generic ArrayList ArrayList is also a generic type ArrayList students = new ArrayList (); students.add(new Student("Ali Alavi")); students.add(new Student("Taghi Taghavi")); students.remove(0); students.remove(new Student("Ali Alavi")); Student student = students.get(0); System.out.println(student); ArrayList implements generic interface List JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source8

interface List { int size(); boolean isEmpty(); boolean contains(Object o); boolean add(E e); boolean remove(Object o); void clear(); E get(int index); E set(int index, E element); void add(int index, E element); E remove(int index); int indexOf(Object o); int lastIndexOf(Object o); List subList(int fromIndex, int toIndex); } JAVACUP.ir9

ArrayList list = new ArrayList (); Scanner scanner = new Scanner(System.in); while(true){ String input = scanner.next(); if(input.equalsIgnoreCase("exit")) break; list.add(input); } if(list.isEmpty()){ System.out.println("No string entered"); }else{ System.out.println("" + list.size() + " strings enetered"); if(list.contains("Ali")) System.out.println("Ali Found!"); for (String s : list) { System.out.println(s); } JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source10 For each is available for collections

ArrayList or Array? That is the question Do we need a dynamic array? Add Remove Performance issue ArrayList is implemented using an array JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source11

Array to List Guess how? String[] strings = {"ali", "taghi"}; ArrayList list = new ArrayList (); for (String string : strings) { list.add(string); } JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source12

List to Array Two methods: Object[] toArray(); T[] toArray(T[] a); ArrayList list = new ArrayList (); Object[] array = list.toArray(); String[] array2 = list.toArray(new String[list.size()]); JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source13

Tell Me… ArrayList as; ArrayList ao; List lo; List ls; True/False? ArrayList is subclass of List ls = as; ArrayList is subclass of ArrayList ao = as; ArrayList is subclass of List lo=as; JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source14

ArrayList Implementation In the heart of an ArrayList, an array lives… public class ArrayList...,implements List,...{ private Object[] elementData; private int size; public boolean add(E e) { ensureCapacity(size + 1); elementData[size++] = e; return true; } JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source15

Tell Me… Why toArray() returns Object[]? JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source16

Collection Collection is super-class of many containers public interface Collection Some methods: int size(); boolean isEmpty(); boolean contains(Object o); boolean add(E e); boolean remove(Object o); void clear(); Object[] toArray(); T[] toArray(T[] a); JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source17

LinkedList LinkedList and ArrayList are both subclass of List ArrayList is implemented by an array LinkedList is implemented by a doubly linked list It is used like an ArrayList Because they are brothers! (subclass of List) JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source18

Linked List JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source19

Doubly Linked List JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source20

LinkedList Example List list = new LinkedList (); list.add("Ali"); list.add("Taghi"); System.out.println(list.get(0)); list.remove("Taghi"); for (String string : list) { System.out.println(string); } JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source21

ArrayList vs. LinkedList LinkedList stores two links for each element if you want to do many insertions and removals in the middle of a list a LinkedList is better If not, an ArrayList is typically faster JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source22

Array, ArrayList and LinkedList JAVACUP.ir23

How to Test Performance? long start = System.currentTimeMillis(); doSomthing(); long end = System.currentTimeMillis(); System.err.println(end - start); JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source24

Quiz! JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source25

Quiz Implement a LinkedList class Support add remove get JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source26

JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source27

Set A set is a an unordered list of disjoint elements {1,2,3,1,4,2} = {4,3,2,1} set.add(1) set.add(2) set.add(3) set.add(1) set.remove(1) Set  {3,2} JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source28

Set A set is a list with no duplicate Suppose we want to implement such a class How?! JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source29

Set Implementation class Set extends ArrayList { public boolean add(E e) { if(!contains(e)) return super.add(e); return false; }; public boolean add(int index, E e) {...} } JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source30

Set and equals() Method When set.add(value) is invoked It checks whether there is any element equal to value If any equal element found, add will return We should implement appropriate equals() method equals() is invoked implicitly JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source31

HashSet Set is an interface public interface Set extends Collection HashSet is one of its (popular) implementations Set and HashSet are generic classes public class HashSet implements Set JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source32

HashSet Example Set set= new HashSet (); set.add("Ali"); set.add("Taghi"); set.add("Ali"); for (String string : set) { System.out.println(string); } JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source33

HashSet Example Set set= new HashSet (); set.add(new Student("Ali")); set.add(new Student("Taghi")); set.add(new Student("Ali")); set.remove(new Student("Taghi")); for (Student student : set) { System.out.println(student); } JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source34

Set or List? List provides access via an index Set does not List is ordered Set checks for duplicates List is (usually) better in performance Set may be better in memory consumption Should we allow duplicates? If not, use sets HashSet is not implemented by a List JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source35

JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source36

Map Map is not a collection Map is a table public interface Map Map is something like a List > First element of each pair is called the key Second element of each pair is called the value Duplicate for keys is not allowed Duplicate for values is possible JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source37

Map map.put( , “Ali Alavi”) map.put( , “Taghi Taghavi”) map.put( , “Naghi Naghavi”) JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source38

public interface Map { int size(); boolean isEmpty(); boolean containsKey(Object key); boolean containsValue(Object value); V get(Object key); V put(K key, V value); V remove(Object key); void putAll(Map m); void clear(); Set keySet(); Collection values(); Set > entrySet(); interface Entry { K getKey(); V getValue(); V setValue(V value); } JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source39

HashMap Map is an interface public interface Map { HashMap is one of its (popular) implementations public class HashMap implements Map JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source40

HashMap Example Map map = new HashMap (); map.put( , "Ali Alavi"); map.put( , "Taghi Taghavi"); map.put( , "Naghi Naghavi"); String name = map.get( ); System.out.println(name); JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source41

Map map = new HashMap (); map.put(new Student("Ali Alavi"), new Double(18.76)); map.put(new Student("Taghi Taghavi"), new Double(15.43)); map.put(new Student("Naghi Naghavi"), new Double(17.26)); map.put(new Student("Naghi Naghavi"), new Double(15.26)); map.remove(new Student("Naghi Naghavi")); Double average = map.get(new Student("Taghi Taghavi")); System.out.println("Avg of Taghi=" + average); for(Student student : map.keySet()){ System.out.println(student.toString()); } Double totalSum = 0.0; for(Double avg : map.values()){ totalSum += avg; } System.out.println("Total Average = " + (totalSum/map.size())); JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source42

JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source43

Iterator Iterator is a mechanism for walking on elements of a collection Before foreach (before Java5) it was the only mechanism iterator() is declared in Iterable interface In fact for-each is applicable on any Iterable object JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source44

Iterator public interface Iterable { Iterator iterator(); } public interface Collection extends Iterable {…} JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source45

Iterator Class public interface Iterator { boolean hasNext(); E next(); void remove(); } JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source46

Iterator Example ArrayList arrayList = new ArrayList (); arrayList.add(4); arrayList.add(5); for (Integer next : arrayList) { System.out.println(next); } Iterator iterator = arrayList.iterator(); while(iterator.hasNext()){ Integer next = iterator.next(); System.out.println(next); } JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source47

Concurrent Modification Suppose some processes are modifying the same collection Java containers have a mechanism to prevent it Suppose you’re in the middle of iterating through a container And then some other process steps in and changes an object in that container Insert, remove, … there are many scenarios for disaster. Maybe you’ve already passed that element in the container Maybe it’s ahead of you Maybe the size of the container shrinks after you call size( ) JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source48

Fail Fast Aspect If a collection is modified by one of its methods after an iterator is created for that collection The iterator immediately becomes invalid Any operations performed with the iterator after this point throw ConcurrentModificationExceptions For this reason, iterators are said to be “fail fast” JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source49

ConcurrentModificationException public class FailFast { public static void main(String[] args) { Collection c = new ArrayList (); Iterator it = c.iterator(); c.add("An object"); String s = it.next(); } JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source50 //Exception line

ConcurrentModificationException ArrayList list = new ArrayList (); list.add(1); list.add(2); list.add(3); list.add(4); for (Integer integer : list) if(integer.equals(2)) list.remove(integer); JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source51 //Exception line

Arrays A utility class with many useful static methods For arrays With methods for Copy Fill Sort Search … JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source52

Arrays Long[] array = new Long[100]; Arrays.fill(array, 5); Long[] copy = Arrays.copyOf(array, 200); //An unmodifiable list: List asList = Arrays.asList(1, 2, 3, 4); List asList2 = Arrays.asList(array); Arrays.sort(array); JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source53

Collections A utility class for collections Copy Fill Sort Search … JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source54

Collections JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source55

Other Containers JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source56

Quiz! JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source57

Quiz Write the method removeAlis(List names) It takes a List as parameter Removes all the elements which start with “Ali” If(str.startsWith(“Ali”)){…} JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source58

Bad Implementation static void removeAli(List list){ for (String string : list) if(string.startsWith("Ali")) list.remove(string); } ConcurrentModificationException Which line? JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source59

Good Implementation public static void removeAli(ArrayList list){ Iterator iterator = list.iterator(); while(iterator.hasNext()) { String string = iterator.next(); if(string.startsWith("Ali")) iterator.remove(); } JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source60

Good Implementation public static void removeAli(ArrayList list){ for (Iterator iterator = list.iterator(); iterator.hasNext();) { String string = iterator.next(); if(string.startsWith("Ali")) iterator.remove(); } List list = new ArrayList (Arrays.asList( "Ali", "AliReza", "Taghi" )); removeAli(list); JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source61

Another Correct Implementation public static void removeAli(ArrayList list){ for (int i = list.size()-1; i >= 0; i--) if(list.get(i).startsWith("Ali")) list.remove(i); } JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source62

hashCode() hashCode() is one of Object methods like equals, toString and finalize It creates a hash from the object Used in classes like HashMap and HashSet for faster retrieval JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source63

JAVACUP.ir Contents redistribution is allowed if JAVACUP is noted as the source64