Category Archives: Collection

Hướng dẫn học collection trong java

Tổng Hợp các câu hỏi phỏng vấn java/js

Tổng Hợp phỏng vấn phần 1:

  1. So sánh linked list vs array list
  2. So sánh Array list vs HashSet
  3. Mấy cái tính chất của OOP
  4. Giả sử một class chưa có hàm constructor thì có constructor chưa, và giá trị thuộc tính ntn
  5. Nếu trong class mình tạo 1 contructor vs 1 tham số thì có mấy contructor? và giải thích
  6. So sánh equals và hashCode() trong java
    Đến javascript
  7. Prototype là gì?
  8. Giải thích callback là gì?
  9. == và === khác nhau cái gì

https://viettuts.vn/interview/list-cau-hoi-phong-van-java-collection
–Câu hỏi 1:
1- sử dụng mảng động để lưu trữ phần tử == sử dụng “doubly linked list” để lưu trữ các phần tử ( có thể duyệt phần tử theo chiều về trước hoặc sau)

  • implement từ list == implement từ list và dequece list
  • tốt cho việc lưu trữ và kết nối dữ liệu == tốt cho việc cập nhật và xóa dữ liệu
    ( tốm lại là 1 thằng lưu trữ theo chỉ mục dể tìm kiếm duyệt === 1 thằng lưu trữ theo node ( dể update và delete vì không cần cập nhật là chỉ mục, không thay đổi kich thước)

=== list set map
một công cụ có thể chứa và thao tác với các đối tượng thuộc nhiều kiểu dữ liệu khác nhau
List == List có thể chứa các phần tử trùng lặp (dublicate)
Set == Không chứa các phần tử trùng nhau ( nếu mà trùng thì nó sẽ bị xóa)
Map == Lưu trữ các phần tử thuộc nhiều kiểu dữ liệu khác nhau nhưng các phần tử là một đối tượng bao gồm key và value
không chứa các phần tử có key( khóa) giống nhau ( nếu có nó lấy phần tử cuối cùng và ghi đè lên phần tử đầu tiên)

Sự khác nhau giữa LinkedList và ArrayList
Sự khác nhau lớn nhất giữa ArrayList và LinkedList nằm ở chỗ có cấu trúc dữ liệu khác, nếu bạn hiểu được cấu trúc của 2 ArrayList và LinkedList thì những khác biệt dưới đây sẽ rất dễ hiểu

Array là cấu trúc dữ liệu có chỉ mục(index) nên tìm kiếm trên Array nhanh hơn, độ phức tạp khi tìm kiếm một phần tử trong Array là O(1). Trái lại, với LinkedList chúng ta không thể truy cập phần tử theo chỉ mục hoặc ngẫu nhiên mà phải duyệt qua các phần tử nên độ phức tạp là O(n)

Chèn phần tử mới vào LinkedList dễ dàng và nhanh hơn so với ArrayList vì LinkedList không có rủi ro về thay đổi kích thước và sao chép dữ liệu sang mảng mới nếu mảng đầy chỉ với độ phức tạo O(1), nhưng với ArrayList thì rất hạn chế để thực hiện thêm mới và sao chép dữ liệu khi đầy thì độ phức tạp là O(n). Bên cạnh đó, ArrayList cần cập nhật lại chỉ mục nếu thêm một phần tử vào giữa mảng.

Xóa phần tử trong mảng giống như thêm mới thì LinkdedList có hiệu suất tốt hơn ArrayList.

LinkedList chiếm nhiều bộ nhớ hơn ArrayList vì trong ArrayList mỗi phần tử chỉ chứa một đối tượng dữ liệu còn LinkedList thì mỗi phần tử(node) lại chứa dữ liệu và địa chỉ của phần tử trước và phần tử sau.

Khi nào dùng LinkedList và ArrayList

LinkedList không được dùng nhiều như ArrayList nhưng có một số trường hợp LinkedList là sự lựa chọn hợp lí hơn ArrayList. Chúng ta nên dùng LinkedList nếu:

Ứng dụng không cần truy cập ngẫu nhiên trong mảng. Vì nếu cần chúng ta sẽ phải duyệt qua mảng để tìm kiếm phần tử phù hợp, độ phức tạp là O(n)
Ứng dụng thao tác thêm mới, xóa nhiều hơn truy cập dữ liệu. Khi đó thêm mới và xóa không phải thay đổi kích thước mảng nên nhanh hơn ArrayList.
— Câu hỏi 2
arraylist == hastSet
thứ tự thêm vào cũng là thứ tự của arraylist( giá trị có thể trùng nhau ) == thứ tự thêm vào bị thay đổi ( giá trị không bị trùng )

— Câu hỏi 3

  • Đóng gói , kế thừa , đa hình , trừu tượng
    đóng gói ->(class) nghĩa là che giấu thông tin(thông qua access modifyer )- đối tượng được bảo vệ không cho truy cập từ bên ngoài để thay đổi hình thái trực tiếp
    — kế thừa -> cho phép xây dựng một lớp dựa trên một lớp đã có và có thể mở rộng ( kế thừa luôn tất cả các thuộc tính và phương thức của lớp cha )
    — đa hình -> một tác vụ được thực hiện theo nhiều cách khác nhau ((method overloading)(lớp cùng tên khác tham số) , nạp chồng (method overriding)( cùng tên cùng tham số cùng kiểu trả về nhưng con viết theo cách riêng của nó ( con ko có cha sẽ được gọi) ghi đè để có tính đa hình )
    — trừu tượng(abstract class và abstract interface ) ẩn các chi tiết triển khai chỉ hiển thị tính năng của người dùng

— Câu hỏi 4. Giả sử một class chưa có hàm constructor thì có constructor chưa, và giá trị thuộc tính ntn
— có rồi contructor sẽ có một default ( cùng tên với lớp không có kiểu trả về ) hệ thống sẽ luôn ngầm tạo cho chúng ta một constructor không có tham số truyền vào, không có nội dung gì bên trong constructor đó
— cùng tên với Class , có thể có nhiều constructor nhưng phải khác tham số truyền vào
— nó được gọi khi từ khóa new được gọi tới Class đó
https://yellowcodebooks.com/2017/05/30/java-bai-20-phuong-thuc-khoi-tao-constructor/
–constructor này cũng là một phương thức
nhưng nó đặc biệt ở chỗ là, ngay khi mà bạn khởi tạo một đối tượng bằng từ khóa new, thì constructor của đối tượng đó sẽ lập tức được gọi đến một cách tự động. Có nghĩa là nếu với phương thức bình thường, bạn phải gọi đến nó thông qua toán tử chấm (“.”) thì phương thức đó mới được thực thi, còn với constructor, ngay khi biên dịch đến từ khóa new, hệ thống sẽ thực thi một constructor tương ứng của đối tượng, tùy vào constructor nào mà bạn chỉ định

Câu hỏi 5: Nếu trong class mình tạo 1 contructor vs 1 tham số thì có mấy contructor? và giải thích
— có 2 constructor ( vì mặc định hệ thống sẽ tạo một constructor trùng với name của Class )

Câu hỏi 6. So sánh equals và hashCode() trong java
–hashCode()(địa chỉ của giá trị trong bảng băm ) Giá trị được tạo ra khi chèn một đối tượng vào trong hastable( dùng để xác định vị trí cũng như tìm vị trí của đối tượng đó trong hashtable )
— equals() dùng sau hashCode() dùng để so sánh 2 hashCode() trùng nhau có thật sự bằng nhau hay không trong hashtable.( kiểm tra 2 tham chiếu tới 2 đối tượng cùng kiểu class trong head ( mặc định ss đối tượng bằng fasle, nên chúng ta cần override lại để so sánh object.
Nếu a.equals(b) thì đồng nghĩa với a.hashcode() = b.hashcode().
a.hashcode() = b.hashcode() thì chưa khẳng định được a.quals(b).
( một cái là địa chỉ == một cái là địa chỉ và kiểu dữ liệu cùng giá trị )
equals() ==
so sánh đối tượng ( ss thành viên lớp dữ liệu ) == so sánh tham chiếu ( địa chỉ bộ nhớ )
Phương thức equals() được thiết kế để so sánh hai đối tượng về mặt ngữ nghĩa (bằng cách so sánh các thành viên dữ liệu của lớp), trong khi toán tử == so sánh hai đối tượng về mặt kỹ thuật (bằng cách so sánh các tham chiếu của chúng, nghĩa là địa chỉ bộ nhớ).

hashCode()
hashCode là gì: hashCode có thể hiểu là giá trị định danh cho 1 đối tượng, những đối tượng bằng nhau sẽ có hashCode bằng nhau còn hashCode bằng nhau thì chưa chắc 2 đối tượng đó đã bằng nhau.
Số băm này được sử dụng bởi các collection dựa trên bảng băm như Hashtable , HashSet và HashMap để lưu trữ các đối tượng trong các container nhỏ được gọi là “nhóm”. Mỗi nhóm được liên kết với mã băm và mỗi nhóm chỉ chứa các đối tượng có mã băm giống hệt nhau.
–JavaScript

  1. Prototype là gì?
    — ( là một khuôn mẫu, là cha của đối tượng ) có phần giống class , được sử dụng cho việc kế thừa (interitance) trong javascript ( kế thừa các hàm )
    https://toidicodedao.com/2016/02/02/series-javascript-sida-po-ro-to-tai-prototype-la-cai-gi/
    vì sao: Array, Number có cha là object ( do đó chúng đều có các hàm như constructor, hasOwnProperty, toString thuộc về của Object.prototype)
  2. Giải thích callback là gì?
    callback tức là ta truyền một đoạn code (Hàm A) này vào một đoạn code khác (Hàm B). Tới một thời điểm nào đó, Hàm A sẽ được hàm B gọi lại (callback).
    — $(‘#btn’).click() ham B sẽ gọi hàm a khi ta click vào nút
    ứng dụng : Gọi 1 hàm khi có 1 số sự kiện xảy ra.LINQ được xây dựng dựa trên khái niệm callback và lambda expression

1..
-Collection

Collection là một công cụ có thể chứa và thao tác với các đối tượng thuộc nhiều kiểu dữ liệu khác nhau
Khắc phục nhược điểm của kiểu array ( kích thước cố định, các phần tử cùng dữ liệu và ô nhớ liền kề nhau) còn hỗ trợ các phương thức tìm kiếm sắp xếp
Các interface của nó ( List ,queue, Set , Map)
các class implement theo cùng nó: Danh Sách Các interface kế thừa collection extends iterable( List , Queue, Set)
List ( ArrayList, Vector, LinkedList)
Queue ( LinkedList implement Dequeue extends Queue)
Set ( HashSet, LinkedHashSet, TreeSet (implement SortedSet extends Set))
Map ( HashMap, LinkedHashMap,TreeMap(implement SortedMap extends Map))

ArrayList
sử dụng mảng động để lưu các phần tử nhiều kiểu dữ liệu khác nhau( giá trị có thể trùng nhau, thứ tự thêm cũng là thứ tự arraylist)
duyệt thông qua for và iterator
// lay ra
 lay ra truc tiep,mà thiếu sự an toàn
for (int i = 0; i<arr.size(); i++){
System.out.println (“data=”+ arr.get(i));
}
 Cách lấy bằng iterater, lấy an toàn.. mà tốc độ xử lý chậm
System.out.println (“++++++++++”);
Iterator it=arr.iterator();
while(it.hasNext()){
System.out.println (“data=”+ it.next());
}
}
Sử dụng tốt khi lưu trữ và truy cập dữ liệu
LinkedList
Sử dụng “Doubly linked list” để lưu các phần tử, implement từ (List, Dequeue)
Sử dụng tốt nếu như cập nhật hoặc xóa đi một phần tử nào đó

Set
Lưu các phần tử thuộc nhiều kiểu dữ liệu khác nhau nhưng phần tử không được lưu trữ theo chỉ số
Không chứa các phần tử trùng nhau ( nếu mà trùng thì nó sẽ bị xóa)
-Khác biệt List vs Set ( list có thể chứa các phần tử giống nhau còn set thì không)
HashSet các phần tử thêm vào không được trùng nhau (thứ tự là ngẫu nhiên bị thay đổi) ( cải thiện hiệu năng và tốc độ truy xuất)
LinkedHashSet(extends HashSet) các phần tử thêm vào không được trùng nhau( thứ tự giống như với thứ tự được thêm vào)
TreeSet các phần tử không được trùng nhau ( thứ tự thêm vào được sắp xếp theo thứ tự tăng dần)

Map
Lưu trữ các phần tử thuộc nhiều kiểu dữ liệu khác nhau nhưng các phần tử là một đối tượng bao gồm key và value
không chứa các phần tử có key( khóa) giống nhau ( nếu có nó lấy phần tử cuối cùng và ghi đè lên phần tử đầu tiên)
HashMap ( cải thiện hiệu năng và tốc độ truy xuất) không đảm bảo thứ tự các phần tử được thêm vào
LinkedHashMap đảm bảo thứ tự các phần tử được thêm vào
TreeMap(Implement SortedMap extends Map) sắp xếp các phần tử theo thứ tự tăng dần của khóa(key)
(vì sắp xếp theo thứ tự tăng dần nên khi chúng ta thực hiện các tháo tác thêm chỉnh sửa các phần tử TreeMap cho
hiệu năng thấp hơn so với HashMap LinkedHashMap vì cập nhật phần tử nào đó thì toàn bộ phần tử được cập nhật lại)

Comparable Interface (dùng để sort)
Thường dùng để overriding lại phương thức CompareTo() trong bean để sắp xếp tăng dần(1) hay giảm dần(-1)
Student implement Comparable và overriding lại CompareTo() là có thể dùng phương thức Collection.sort(object) với object

Comparator Interface (dùng để sort) tương tự như Comparable
Định nghĩa một Class implement về Comparator
Sử dụng tham số thứ 2 trong Collection.sort(list,Class implement về Comparator đã tạo)

Collection Interface là nền tảng nó khai báo tất cả các phương thức core mà collection sẽ có
Cho phép bạn có thể làm việc với các nhóm đối tượng, nó là phần interface cha của tất cả các collection interface khác

Comparator Collection

Comparator Interface (dùng để sort) tương tự như Comparable
Định nghĩa một Class implement về Comparator
Sử dụng tham số thứ 2 trong Collection.sort(list,Class implement về Comparator đã tạo)

Sort With Number

public static void main(String[] args) {
		// TODO Auto-generated method stub

		Course course = new Course("Android", 12);
		Course course1 = new Course("Java", 45);
		Course course12 = new Course("learn C", 3);
		Course course13 = new Course("Android C", 12);

		ArrayList arr = new ArrayList();
		arr.add(course);
		arr.add(course1);
		arr.add(course12);
		arr.add(course13);
		
		Iterator it = arr.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}

//		Collections.sort(arr,new TimeComparator());
		System.out.println("-----------------------");
		Iterator it1 = arr.iterator();
		while (it1.hasNext()) {
			Object obj = it1.next();
			if (obj instanceof Course) {
				Course cs = (Course) obj;
				System.out.println(cs.getNameCourse() + " " + cs.getTime());
			}
		}
	}
public class TimeComparator implements Comparator{

	@Override
	public int compare(Object o1, Object o2) {
		// TODO Auto-generated method stub
		Course course1=(Course) o1;
		Course course2=(Course) o2;
		if(course1.getTime() > course2.getTime()) return 1;
		if(course1.getTime() < course2.getTime()) return -1;
		return 0;
	}

}

Sort With A-Z

public class ComparatorCollecion {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Course course = new Course("Android", 12);
		Course course1 = new Course("Java", 45);
		Course course12 = new Course("learn C", 3);
		Course course13 = new Course("Android C", 12);

		ArrayList arr = new ArrayList();
		arr.add(course);
		arr.add(course1);
		arr.add(course12);
		arr.add(course13);
		
		Iterator it = arr.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}

//		Collections.sort(arr,new TimeComparator());
		Collections.sort(arr, new NameComparator());
		System.out.println("-----------------------");
		Iterator it1 = arr.iterator();
		while (it1.hasNext()) {
			Object obj = it1.next();
			if (obj instanceof Course) {
				Course cs = (Course) obj;
				System.out.println(cs.getNameCourse() + " " + cs.getTime());
			}
		}
	}

}
public class NameComparator implements Comparator{
	
	@Override
	public int compare(Object o1, Object o2) {
		// TODO Auto-generated method stub
		Course course1=(Course) o1;
		Course course2=(Course) o2;
		return course1.getNameCourse().compareTo(course2.getNameCourse());
	}
	
}

Course [name=Android, time=12]
Course [name=Java, time=45]
Course [name=learn C, time=3]

Course [name=Android C, time=12]

Android 12
Android C 12
Java 45
learn C 3

public class ComparatorCollecion {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Course course = new Course("Android", 12);
		Course course1 = new Course("Java", 45);
		Course course12 = new Course("learn C", 3);
		Course course13 = new Course("Android C", 12);

		ArrayList arr = new ArrayList();
		arr.add(course);
		arr.add(course1);
		arr.add(course12);
		arr.add(course13);
		
		Iterator it = arr.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}

//		Collections.sort(arr,new TimeComparator());
//		Collections.sort(arr, new NameComparator());
		Collections.sort(arr,new Comparator() {

			@Override
			public int compare(Object o1, Object o2) {
				Course course1=(Course) o1;
				Course course2=(Course) o2;
				if(course1.getTime() > course2.getTime()) return 1;
				if(course1.getTime() < course2.getTime()) return -1;
				return 0;
			}
			
		});
		
		System.out.println("-----------------------");
		Iterator it1 = arr.iterator();
		while (it1.hasNext()) {
			Object obj = it1.next();
			if (obj instanceof Course) {
				Course cs = (Course) obj;
				System.out.println(cs.getNameCourse() + " " + cs.getTime());
			}
		}
	}

}

Collection Comparable(Sort) CompareTo()

Comparable Interface
Thường dùng để overriding lại phương thức CompareTo() trong bean để sắp xếp tăng dần(1) hay giảm dần(-1)
Student implement Comparable và overriding lại CompareTo() là có thể dùng phương thức Collection.sort(object) với object

Class Course implement về Comparable

public class Course implements Comparable{
	private String nameCourse;
	private int time;
	public Course() {
		
	}
	public Course(String name, int time) {
		super();
		this.nameCourse = name;
		this.time = time;
	}
	@Override
	public String toString() {
		return "Course [name=" + nameCourse + ", time=" + time + "]";
	}
	public String getNameCourse() {
		return nameCourse;
	}
	public void setName(String name) {
		this.nameCourse = name;
	}
	public int getTime() {
		return time;
	}
	public void setTime(int time) {
		this.time = time;
	}
	@Override
	public int compareTo(Object o) {
		// TODO Auto-generated method stub
		Course crs=(Course) o;
		if(this.getTime() > crs.getTime()) return 1;
		else if(this.getTime() < crs.getTime()) return -1;
		return 0;
	}
}
public class ComparableCollection {

	public static void main(String[] args) {

		Course course = new Course("Android", 12);
		Course course1 = new Course("Java", 45);
		Course course12 = new Course("learn C", 3);

		ArrayList arr = new ArrayList();
		arr.add(course);
		arr.add(course1);
		arr.add(course12);

		Iterator it = arr.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}

		Collections.sort(arr);
		System.out.println("-----------------------");
		Iterator it1 = arr.iterator();
		while (it1.hasNext()) {
			Object obj = it1.next();
			if (obj instanceof Course) {
				Course cs = (Course) obj;
				System.out.println(cs.getNameCourse() + " " + cs.getTime());
			}
		}

	}
}

OUTPUT

Course [name=Android, time=12]
Course [name=Java, time=45]                                                                          Course [name=learn C, time=3]

learn C 3
Android 12
Java 45

Map Collection

Map
Lưu trữ các phần tử thuộc nhiều kiểu dữ liệu khác nhau nhưng các phần tử là một đối tượng bao gồm key và value
không chứa các phần tử có key( khóa) giống nhau ( nếu có nó lấy phần tử cuối cùng và ghi đè lên phần tử đầu tiên)
HashMap ( cải thiện hiệu năng và tốc độ truy xuất) không đảm bảo thứ tự các phần tử được thêm vào
LinkedHashMap đảm bảo thứ tự các phần tử được thêm vào
TreeMap(Implement SortedMap extends Map) sắp xếp các phần tử theo thứ tự tăng dần của khóa(key)
(vì sắp xếp theo thứ tự tăng dần nên khi chúng ta thực hiện các tháo tác thêm chỉnh sửa các phần tử TreeMap cho
hiệu năng thấp hơn so với HashMap LinkedHashMap vì cập nhật phần tử nào đó thì toàn bộ phần tử được cập nhật lại
)

public class MapInterface {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("HashMap ");
		hashMap();
		System.out.println("linkedHashMap ");
		linkedHashMap();
		System.out.println("TreeMap output sorted");
		treeMap();
	}
	// truy xuat toc do cham vi no se load lai khi co mot phan tu update xoa
	private static void treeMap() {
		// TODO Auto-generated method stub
		TreeMap lk= new TreeMap();
		lk.put("course_001", "android");
		lk.put("course_004", "java");
		lk.put("course_005", "python");
		lk.put("course_003", "HTML");
		lk.put("course_002", "C");
		System.out.println(lk.toString());
		Iterator iter= lk.keySet().iterator();
		while(iter.hasNext()) {
			Object key= iter.next();
			Object value= lk.get(key);
			System.out.println(key+"  "+value);
		}
	}

	private static void linkedHashMap() {
		// TODO Auto-generated method stub
		LinkedHashMap lk= new LinkedHashMap();
		lk.put("course_001", "android");
		lk.put("course_004", "java");
		lk.put("course_005", "python");
		lk.put("course_003", "HTML");
		lk.put("course_002", "C");
		System.out.println(lk.toString());
		Iterator iter= lk.keySet().iterator();
		while(iter.hasNext()) {
			Object key= iter.next();
			Object value= lk.get(key);
			System.out.println(key+"  "+value);
		}
	}

	private static void hashMap() {
		// TODO Auto-generated method stub
		Map hashMap= new HashMap();
		hashMap.put("course_001", "android");
		hashMap.put("course_004", "java");
		hashMap.put("course_005", "python");
		hashMap.put("course_003", "HTML");
		hashMap.put("course_002", "C");
		System.out.println(hashMap.toString());
		Iterator itr= hashMap.keySet().iterator();
		while(itr.hasNext()) {
			Object key=itr.next();
			Object value= hashMap.get(key);
			System.out.println(key + "  "+ value);
		}
		
	}

}

OUTPUT

HashMap
{course_003=HTML, course_002=C, course_001=android, course_005=python, course_004=java}
course_003 HTML
course_002 C
course_001 android
course_005 python
course_004 java
linkedHashMap
{course_001=android, course_004=java, course_005=python, course_003=HTML, course_002=C}
course_001 android
course_004 java
course_005 python
course_003 HTML
course_002 C
TreeMap output sorted
{course_001=android, course_002=C, course_003=HTML, course_004=java, course_005=python}
course_001 android
course_002 C
course_003 HTML
course_004 java
course_005 python

Set Collection

Set
Lưu các phần tử thuộc nhiều kiểu dữ liệu khác nhau nhưng phần tử không được lưu trữ theo chỉ số
Không chứa các phần tử trùng nhau ( nếu mà trùng thì nó sẽ bị xóa)
-Khác biệt List vs Set ( list có thể chứa các phần tử giống nhau còn set thì không)
HashSet các phần tử thêm vào không được trùng nhau (thứ tự là ngẫu nhiên bị thay đổi)
LinkedHashSet các phần tử thêm vào không được trùng nhau( thứ tự giống như với thứ tự được thêm vào)
TreeSet các phần tử không được trùng nhau ( thứ tự thêm vào được sắp xếp theo thứ tự tăng dần)

public class SetInterface {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		linkedHashSet();
		hashSet();
		treeSet();
	}

	private static void linkedHashSet() {
		// TODO Auto-generated method stub
		LinkedHashSet lk= new LinkedHashSet<>();
		lk.add(8);
		lk.add(12);
		lk.add("java");
		Iterator it= lk.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
		
	}

	private static void hashSet() {
		// TODO Auto-generated method stub
		HashSet lk= new HashSet<>();
		lk.add(8);
		lk.add(12);
		lk.add("java");
		Iterator it= lk.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
	}

	private static void treeSet() {
		// TODO Auto-generated method stub
		TreeSet lk= new TreeSet();
		lk.add(8);
		lk.add(12);
		lk.add(55);
		lk.add(23);
		Iterator it= lk.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
	}

}

OUTPUT

linkedHashSet
8
12
java
HashSet
java
8
12
TreeSet output sorted
8
12
23
55