Bạn đang xem bài viết Arraylist Và Linkedlist Trong Java được cập nhật mới nhất trên website Channuoithuy.edu.vn. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất.
Với ArrayList số lượng phần tử có thể cắt giảm hay mở rộng là tùy thuộc yêu cầu sử dụng, sử dụng LinkedList khi cần làm việc với lượng phần tử lớn
ArrayList
Mảng cơ bản trong Java là cố định về số phần tử, nghĩa là sau khai báo chúng không thể mở rộng, hay cắt bớt số phần tử. Nếu muốn có thêm chức năng này thì dùng ArrayList trong package java.util
import java.util.ArrayList; ArrayList colors = new ArrayList();Bạn cũng có thể khai báo chi ngay ra kiểu các phần tử mảng này lưu trữ
ArrayList colors = new ArrayList(10);Nên nhớ ArrayList lưu giữ các phần tử là đối tượng, nên các kiểu nguyên thủy int, double, float … không dùng được. Thay vào đó hãy dùng các lớp tương ứng như Integer, Double, Float …
Một số phương thức ArrayList
add(Object o) thêm phần tử vào cuối
add(int index, Object element) chèn phần tử vào vị trí index
remove(int index) xóa phần tử có chỉ số index
clear() xóa mọi phần tử
contains(Object o) kiểm tra mảng có chứa phần tử
get(int index) lấy phần tủ có chỉ số index
indexOf(Object o) lấy chỉ số trong mảng của phần tử
size() lấy số phần tử
toArray() chuyển thành mảng
import java.util.ArrayList; public class MyClass { public static void main(String[ ] args) { colors.add("Red"); colors.add("Blue"); colors.add("Green"); colors.add("Orange"); colors.remove("Green"); colors.add("Pink"); colors.add("Yellow"); System.out.println(colors.get(1)); System.out.println(colors.contains("Orange")); System.out.println(colors.size()); System.out.println(colors); } } /* Output : Blue true 5 [Red,Blue,Orange,Pink,Yellow] */
LinkedList
LinkedList có cú pháp, khai báo rất giống với ArrayList, bạn dễ dàng đổi từ ArrayList sang LinkedList bằng cách thay kiểu đối tượng.
Điều khác biết giữa LinkedList và ArrayList là cách chúng lưu trữ dữ liệu. ArrayList tốt để lưu trữ và truy cập dữ liệu, nó gần giống với mảng thông thường. LinkedList thì tốt để tương quản lý dữ liệu, như chèn và xóa một lượng lớn phần tử.
import java.util.LinkedList; public class MyClass { public static void main(String[ ] args) { c.add("Red"); c.add("Blue"); c.add("Green"); c.add("Orange"); c.remove("Green"); for(String s: c) { System.out.println(s); } System .out.println ("*******************************************"); for(int i=0;i
ArrayList khi bạn cần truy cập nhanh dữ liệu
LinkedList khi cần làm việc với việc chèn / xóa lượng lớn phần tử
ArrayListLinkedListĐĂNG KÝ KÊNH, XEM CÁC VIDEO TRÊN XUANTHULAB
Abstract Class Và Interface Trong Java
Trong tài liệu hướng dẫn này tôi sẽ hướng dẫn về Interface và class trừu tượng (Abstract Class). Đồng thời phân tích sự giống và khác nhau giữa chúng.
Abstract class (Class trừu tượng). Hãy xem ví dụ về một class như thế:
public abstract class ClassA { public abstract void doSomething(); protected abstract String doNothing(); abstract void todo() ; } public abstract class ClassB { }Đặc điểm của một class trừu tượng là:
Nó được khai báo abstract.
Nó có thể khai báo 0, 1 hoặc nhiều method trừu tượng bên trong.
Không thể khởi tạo 1 đối tượng trực tiếp từ một class trừu tượng.
package org.o7planning.tutorial.abs; public abstract class AbstractJob { public AbstractJob() { } public abstract String getJobName(); public abstract void doJob(); } package org.o7planning.tutorial.abs; public class JavaCoding extends AbstractJob { public JavaCoding() { } @Override public void doJob() { System.out.println("Coding Java..."); } @Override public String getJobName() { return "Coding Java"; } } package org.o7planning.tutorial.abs; public abstract class ManualJob extends AbstractJob { public ManualJob() { } @Override public String getJobName() { return "Manual Job"; } } package org.o7planning.tutorial.abs; public class BuildHouse extends ManualJob { public BuildHouse() { } @Override public void doJob() { System.out.println("Build a House"); } } package org.o7planning.tutorial.abs; public class JobDemo { public static void main(String[] args) { AbstractJob job1 = new JavaCoding(); job1.doJob(); String jobName = job1.getJobName(); System.out.println("Job Name 1= " + jobName); AbstractJob job2 = new BuildHouse(); job2.doJob(); String jobName2 = job2.getJobName(); System.out.println("Job Name 2= " + jobName2); } }Chúng ta biết rằng một class chỉ có thể mở rộng từ một class cha.
public class B extends A { } public class B { } public class B extends Object { }Nhưng một class có thể mở rộng từ nhiều Interface
public class Cat extends Animal implements CanEat, CanDrink { }Các đặc điểm của interface
Interface luôn luôn có modifier là: public interface, cho dù bạn có khai báo rõ hay không.
Nếu có các trường (field) thì chúng đều là: public static final, cho dù bạn có khai báo rõ hay không.
Các method của nó đều là method trừu tượng, nghĩa là không có thân hàm, và đều có modifier là: public abstract, cho dù bạn có khai báo hay không.
Interface không có Constructor (cấu tử).
NoAccessModifierInterface.java
package org.o7planning.tutorial.itf; interface NoAccessModifierInterface { } package org.o7planning.tutorial.itf; public interface CanMove { public abstract void run(); void back(); public int getVelocity(); } package org.o7planning.tutorial.itf; public interface CanDrink { public static final String PEPSI = "PEPSI"; final String NUMBER_ONE = "NUMBER ONE"; String SEVENUP = "SEVEN UP"; public void drink(); } package org.o7planning.tutorial.itf; public interface CanEat { public void eat(); } package org.o7planning.tutorial.cls; import org.o7planning.tutorial.itf.CanMove; public abstract class Animal implements CanMove { @Override public void run() { System.out.println("Animal run..."); } } package org.o7planning.tutorial.cls; import org.o7planning.tutorial.itf.CanDrink; import org.o7planning.tutorial.itf.CanEat; public class Cat extends Animal implements CanEat, CanDrink { private String name; public Cat(String name) { this.name = name; } public String getName() { return this.name; } @Override public void back() { System.out.println(name + " cat back ..."); } @Override public int getVelocity() { return 110; } @Override public void eat() { System.out.println(name + " cat eat ..."); } @Override public void drink() { System.out.println(name + " cat drink ..."); } } package org.o7planning.tutorial.cls; import org.o7planning.tutorial.itf.CanDrink; import org.o7planning.tutorial.itf.CanEat; public class Mouse extends Animal implements CanEat, CanDrink { @Override public void back() { System.out.println("Mouse back ..."); } @Override public int getVelocity() { return 85; } @Override public void drink() { System.out.println("Mouse drink ..."); } @Override public void eat() { System.out.println("Mouse eat ..."); } } package org.o7planning.tutorial.cls; import org.o7planning.tutorial.itf.CanEat; public class AnimalDemo { public static void main(String[] args) { System.out.println("Drink " + Cat.SEVENUP); CanEat canEat1 = new Cat("Tom"); CanEat canEat2 = new Mouse(); canEat1.eat(); canEat2.eat(); boolean isCat = canEat1 instanceof Cat; System.out.println("catEat1 is Cat? " + isCat); if (canEat2 instanceof Mouse) { Mouse mouse = (Mouse) canEat2; mouse.drink(); } } }
So Sánh Và Sắp Xếp Trong Java
1- Kiểu nguyên thủy và kiểu tham chiếu trong Java.
Trước hết chúng ta cần phân biệt kiểu nguyên thủy (Primitive type) và kiểu tham chiếu (reference type) trong java.
Trong Java chúng ta có 8 kiểu nguyên thủy.
Tất cả các kiểu khác đều mở rộng từ Object, chúng là các kiểu tham chiếu.
2- Kiểu nguyên thủy lưu trữ thế nào trên bộ nhớ
Trước hết bạn phải hiểu rằng, Java không đảm bảo rằng mỗi biến sẽ tương ứng với một vị trí trên bộ nhớ. chẳng hạn Java sẽ tối ưu theo cách biến ‘i’ sẽ được lưu trữ trên bộ đăng ký (register), hoặc thậm trí không được lưu trữ ở đâu cả, nếu trình biên dịch nhận thấy rằng bạn không bao giờ sử dụng giá trị của nó, hoặc nó có thể được dõi theo thông qua code và sử dụng các giá trị phù hợp một cách trực tiếp.
int a = 100; a = 200; int b = a;Khi đó Java thực hiện các thao tác sau:
3- Kiểu tham chiếu lưu trữ thế nào trên bộ nhớ
Khi bạn sử dụng toán tử new (Ví dụ new Object()), Java sẽ tạo ra một thực thể mới trên bộ nhớ. Bạn khai báo một biến và khởi tạo giá trị của nó thông qua toán tử new, chẳng hạn Object a = new Object(); Java sẽ tạo ra một thực thể mới trong bộ nhớ, và một tham chiếu ‘a’ trỏ tới vị trí bộ nhớ của thực thể vừa được tạo ra.
Khi bạn khai báo một biến b Object b = a; không có thực thể nào được tạo ra trong bộ nhớ, Java chỉ tạo ra một tham chiếu ‘b’, trỏ tới vị cùng vị trí mà ‘a’ đang trỏ tới.
Object a = new Object(); a = new String("Text"); Object b = a;Trong Java có 2 kiểu so sánh:
Sử dụng toán tử ==
Sử dụng phương thức (method) equals(..)
Toán tử == dùng so sánh các kiểu nguyên thủy và các kiểu tham chiếu. Toán tử equals(..) là một phương thức chỉ dùng cho các kiểu tham chiếu.
5- So sánh các kiểu nguyên thủy
Với kiểu nguyên thủy chúng ta chỉ có duy nhất một cách so sánh bằng toán tử ==, các kiểu nguyên thủy so sánh với nhau thông qua giá trị của chúng.
int a = 200; int b = 200; boolean c = (a == b);6.1- Sử dụng toán tử == so sánh các kiểu tham chiếu
Khi bạn so sánh 2 đối tượng tham chiếu theo toán tử ==, có nghĩa là so sánh vị trí mà 2 đối tượng tham chiếu này trỏ tới. Về bản chất là kiểm tra xem 2 tham chiếu đó có cùng trỏ tới một thực thể trên bộ nhớ hay không.
package org.o7planning.tutorial.comparation; public class ReferenceEeDemo { public static void main(String[] args) { String str1 = "String 1"; String str2 = new String("String 1"); String s1 = new String("This is text"); String s2 = new String("This is text"); boolean e1 = (s1 == s2); System.out.println("s1 == s2 ? " + e1); Object obj = s1; boolean e2 = (obj == s1); System.out.println("obj == s1 ? " + e2); } }Kết quả chạy chương trình
6.2- Sử dụng equals(..) so sánh các kiểu tham chiếu
StringComparationDemo.java
package org.o7planning.tutorial.comparation; public class StringComparationDemo { public static void main(String[] args) { String s1 = new String("This is text"); String s2 = new String("This is text"); boolean e1 = s1.equals(s2); System.out.println("first comparation: s1 equals s2 ? " + e1); s2 = new String("New s2 text"); boolean e2 = s1.equals(s2); System.out.println("second comparation: s1 equals s2 ? " + e2); } }Kết quả chạy chương trình:
6.3- Ghi đè phương thức equals(Object)
Phương thức equals(Object) là phương thức có sẵn của class Object, mọi class con đều được thừa kế method này. Trong một số tình huống bạn có thể ghi đè method này tại class con.
package org.o7planning.tutorial.comparation.equals; public class NumberOfMedals { private int goldCount; private int silverCount; private int bronzeCount; public NumberOfMedals(int goldCount, int silverCount, int bronzeCount) { this.goldCount = goldCount; this.silverCount = silverCount; this.bronzeCount = bronzeCount; } public int getGoldCount() { return goldCount; } public int getSilverCount() { return silverCount; } public int getBronzeCount() { return bronzeCount; } @Override public boolean equals(Object other) { if (other == null) { return false; } if (!(other instanceof NumberOfMedals)) { return false; } NumberOfMedals otherNoM = (NumberOfMedals) other; if (this.goldCount == otherNoM.goldCount && this.silverCount == otherNoM.silverCount && this.bronzeCount == otherNoM.bronzeCount) { return true; } return false; } }NumberOfMedalsComparationDemo.java
package org.o7planning.tutorial.comparation.equals; public class NumberOfMedalsComparationDemo { public static void main(String[] args) { NumberOfMedals american = new NumberOfMedals(40, 15, 15); NumberOfMedals japan = new NumberOfMedals(10, 5, 20); NumberOfMedals korea = new NumberOfMedals(10, 5, 20); System.out.println("Medals of American equals Japan ? " + american.equals(japan)); System.out.println("Medals of Korea equals Japan ? " + korea.equals(japan)); } }7- Ví dụ sắp xếp một mảng String
String vốn là một class mà các đối tượng của nó có thể so sánh với nhau, theo quy tắc chữ cái. Ví dụ sau đây minh họa cách sắp xếp một mảng String sử dụng các phương thức tiện ích có sẵn trong Java.
StringArraySortingDemo.java
package org.o7planning.tutorial.sorting; import java.util.Arrays; public class StringArraySortingDemo { public static void main(String[] args) { String[] fruits = new String[] { "Pineapple", "Apple", "Orange", "Banana" }; Arrays.sort(fruits); for (int i = 0; i < fruits.length; i++) { System.out.println("fruits " + i + " : " + fruits[i]); } } } public class Actor { private String firstName; private String lastName; } package org.o7planning.tutorial.sorting; private String firstName; private String lastName; public Actor(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } @Override public int compareTo(Actor other) { int value = this.lastName.compareTo(other.lastName); if (value != 0) { return value; } value = this.firstName.compareTo(other.firstName); return value; } } package org.o7planning.tutorial.sorting; public class ActorSortingDemo { public static void main(String[] args) { Actor actor1 = new Actor("Mischa", "Barton"); Actor actor2 = new Actor("Christian", "Bale"); Actor actor3 = new Actor("Joan", "Collins"); Actor actor4 = new Actor("Gemma", "Arterton"); Actor actor5 = new Actor("Daniel", "Craig"); Actor[] actors = new Actor[] { actor1, actor2, actor3, actor4, actor5 }; for (int i = 0; i < actors.length; i++) { for (int j = i + 1; j < actors.length; j++) { if (actors[j].compareTo(actors[i]) < 0) { Actor temp = actors[j]; actors[j] = actors[i]; actors[i] = temp; } } } for (int i = 0; i < actors.length; i++) { System.out.println(actors[i].getFirstName() + " " + actors[i].getLastName()); } } }Sử dụng Arrays.sort(Object[]) để sắp xếp ví dụ trên:
package org.o7planning.tutorial.sorting; import java.util.Arrays; public class ActorSortingDemo2 { public static void main(String[] args) { Actor actor1 = new Actor("Mischa", "Barton"); Actor actor2 = new Actor("Christian", "Bale"); Actor actor3 = new Actor("Joan", "Collins"); Actor actor4 = new Actor("Gemma", "Arterton"); Actor actor5 = new Actor("Daniel", "Craig"); Actor[] actors = new Actor[] { actor1, actor2, actor3, actor4, actor5 }; Arrays.sort(actors); for (int i = 0; i < actors.length; i++) { System.out.println(actors[i].getFirstName() + " " + actors[i].getLastName()); } } } package org.o7planning.tutorial.sorting; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ListSortingDemo { public static void main(String[] args) { Actor actor1 = new Actor("Mischa", "Barton"); Actor actor2 = new Actor("Christian", "Bale"); Actor actor3 = new Actor("Joan", "Collins"); Actor actor4 = new Actor("Gemma", "Arterton"); Actor actor5 = new Actor("Daniel", "Craig"); actors.add(actor1); actors.add(actor2); actors.add(actor3); actors.add(actor4); actors.add(actor5); Collections.sort(actors); for (Actor actor : actors) { System.out.println(actor.getFirstName() + " " + actor.getLastName()); } } }10- Sắp xếp sử dụng bộ so sánh (Comparator)
Các ví dụ trên chúng ta sắp xếp một mảng hoặc một danh sách. Bản thân các phần tử của nó có khả năng so sánh với nhau (Do thi hành interface Comparable). Câu hỏi đặt ra với các đối tượng mà class của nó không thi hành interface Comparable, thì có thể sắp xếp được không. Trong trường hợp này bạn cần cung cấp 1 bộ so sánh (Comparator) nó là quy tắc để sắp xếp các đối tượng kia.
package org.o7planning.tutorial.comparator; public class Person { private int age; private String fullName; public Person(String fullName, int age) { this.fullName = fullName; chúng tôi = age; } public int getAge() { return age; } public String getFullName() { return fullName; } } package org.o7planning.tutorial.comparator; import java.util.Comparator; @Override public int compare(Person o1, Person o2) { if (o1 == null && o2 == null) { return 0; } if (o1 == null) { return -1; } if (o2 == null) { return 1; } int value = o1.getAge() - o2.getAge(); if (value != 0) { return value; } value = o1.getFullName().compareTo(o2.getFullName()); return value; } }ComparatorSortingDemo.java
package org.o7planning.tutorial.comparator; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; public class ComparatorSortingDemo { public static void main(String[] args) { Person person1 = new Person("Marry", 20); Person person2 = new Person("Tom", 21); Person person3 = new Person("Daniel", 21); Person person4 = new Person("Mischa", 18); Person person5 = new Person("Christian", 20); Person[] array = new Person[] { person1, person2, person3, person4, person5 }; Arrays.sort(array, new PersonComparator()); for (Person person : array) { System.out.println("Person: " + person.getAge() + " / " + person.getFullName()); } list.add(person1); list.add(person2); list.add(person3); list.add(person4); list.add(person5); Collections.sort(list, new PersonComparator()); for (Person person : list) { System.out.println("Person: " + person.getAge() + " / " + person.getFullName()); } } }
So Sánh Chuỗi Trong Java
So sánh chuỗi trong java
Chúng ta có thể so sánh chuỗi trong java trên cơ sở nội dung và tham chiếu của nó.
Nó được sử dụng trong xác thực (bởi phương thức equals()), sắp xếp (theo phương thức compareTo()), so sánh tham chiếu(với toán tử ==), vv
Có ba cách để so sánh chuỗi trong java:
Sử dụng phương thức equals()
Sử dụng toán tử ==
Sử dụng phương thức compareTo()
1) So sánh chuỗi bằng phương thức equals()
Phương thức equals() được sử dụng để so sánh nội dung của 2 chuỗi. Lớp String cung cấp 2 phương thức equals():
public boolean equals(Object another): so sánh 2 chuỗi có phân biệt chữ hoa, chữ thường.
public boolean equalsIgnoreCase(String another): so sánh 2 chuỗi không phân biệt chữ hoa, chữ thường.
Ví dụ 1:
public class Teststringcomparison1 { public static void main(String args[]) { String s1 = "Hello"; String s2 = "Hello"; String s3 = new String("Hello"); String s4 = "Hallo"; System.out.println(s1.equals(s2));//true System.out.println(s1.equals(s3));//true System.out.println(s1.equals(s4));//false } }Output:
Ví dụ 2:
public class Teststringcomparison2 { public static void main(String args[]) { String s1 = "Hello"; String s2 = "HELLO"; System.out.println(s1.equals(s2));//false System.out.println(s1.equalsIgnoreCase(s2));//true } }Output:
2) So sánh chuỗi bằng toán tử ==
Toán tử == được sử dụng để so sánh tham chiếu (không phải giá trị) của 2 chuỗi.
Ví dụ 3:
public class Teststringcomparison3 { public static void main(String args[]) { String s1 = "Hello"; String s2 = "Hello"; String s3 = new String("Hello"); System.out.println(s1 == s2);//true (vì cả 2 cùng tham chiếu instance giống nhau) System.out.println(s1 == s3);//false(vì s3 tham chiếu instance mà không ở trong Pool) } }Output:
3) So sánh chuỗi bằng phương thức compareTo()
Phương thức compareTo () so sánh các giá trị theo thứ tự từ điển và trả về một giá trị số nguyên mô tả nếu chuỗi đầu tiên nhỏ hơn, bằng hoặc lớn hơn chuỗi thứ hai.
Giả sử s1 và s2 là hai biến chuỗi. Nếu:
Ví dụ 4:
public static void main(String args[]) { String s1 = "Hello"; String s2 = "Hello"; String s3 = "Java"; System.out.println(s1.compareTo(s2)); System.out.println(s1.compareTo(s3)); System.out.println(s3.compareTo(s1)); }Output:
Cập nhật thông tin chi tiết về Arraylist Và Linkedlist Trong Java trên website Channuoithuy.edu.vn. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất. Chúc bạn một ngày tốt lành!