Java data structures include: 1. List; 2. Vector; 3. ArrayList; 4. LinkedList; 5. Set; 6. HashSet; 7. LinkedHashSet; 8. SortedSet; 9. Map; 10. HashMap .
The operating environment of this article: windows10 system, java 1.8, thinkpad t480 computer.
There are several commonly used data structures in Java, which are mainly divided into two main interfaces: Collection and map (the interface only provides methods and does not provide implementation), and the data structures ultimately used in the program are inherited from these The data structure class of the interface.
Collection---->Collections Map----->SortedMap------>TreeMap Map------>HashMap Collection---->List----->(Vector \ ArryList \ LinkedList) Collection---->Set------>(HashSet \ LinkedHashSet \ SortedSet)
List (interface)
List is an ordered Collection. Use this interface to accurately control the insertion position of each element. Users can use the index (the position of the element in the List, similar to the array subscript) to access the elements in the List, which is similar to Java arrays.
Vector
List based on array (Array) actually encapsulates some functions that arrays do not have for us to use, so it is difficult to avoid the limitations of arrays, and the performance is also impossible Beyond arrays. Therefore, where possible, we should use arrays more. Another very important point is that Vector is thread synchronized (sychronized), which is also an important difference between Vector and ArrayList.
ArrayList
Like Vector, it is a linked list based on an array, but the difference is that ArrayList is not synchronized. Therefore, it is better than Vector in terms of performance, but when running in a multi-threaded environment, you need to manage the synchronization of threads yourself.
LinkedList
LinkedList is different from the previous two Lists. It is not based on arrays, so it is not limited by array performance.
Each node (Node) contains two aspects of content:
1. The data of the node itself;
2. The information of the next node ( nextNode).
So when adding and deleting actions to LinkedList, you don’t have to move a lot of data like array-based ArrayList. This can be achieved by simply changing the relevant information of nextNode. This is the advantage of LinkedList.
List Summary
All Lists can only hold tables composed of a single object of different types, not Key-Value pairs. For example: [tom,1,c]
All Lists can have the same elements, for example, Vector can have [tom,koo,too,koo]
All Lists can have There are null elements, such as [tom,null,1]
Array-based List (Vector, ArrayList) is suitable for query, while LinkedList is suitable for addition and deletion operations
Set (interface)
Set is a Collection that does not contain repeated elements
HashSet
Although Set and List both implement the Collection interface, their implementation methods are quite different. List is basically based on Array. But Set is implemented on the basis of HashMap. This is the fundamental difference between Set and List. The storage method of HashSet is to use the Key in HashMap as the corresponding storage item of Set. It will be clear at a glance if you look at the implementation of the add(Object obj) method of HashSet.
LinkedHashSet
A subclass of HashSet, a linked list.
SortedSet
Ordered Set is implemented through SortedMap.
Map (Interface)
Map is a container that associates key objects and value objects, and a value object can be a Map, and so on, thus forming a multiple level mapping. For key objects, like Set, the key objects in a Map container are not allowed to be repeated. This is to maintain the consistency of the search results; if there are two key objects that are the same, then you want to get the value object corresponding to that key object. There will be a problem. Maybe what you get is not the value object you thought, and the result will be confusion. Therefore, the uniqueness of the key is very important and is in line with the nature of the set.
Of course, during use, the value object corresponding to a certain key may change. In this case, the last modified value object will correspond to the key. There is no uniqueness requirement for value objects. You can map any number of keys to a value object without any problems (but it may cause inconvenience to your use. You don’t know what you are getting. is the value object corresponding to that key).
(Free video tutorial sharing: java video tutorial)
HashMap
Implementation of Map interface based on hash table. This implementation provides all optional mapping operations and allows null values ??and null keys. (The HashMap class is much the same as a Hashtable, except that it is not synchronized and allows null.) This class does not guarantee the order of the map, and in particular it does not guarantee that the order is immutable. In addition, HashMap is not thread-safe, which means that there may be problems in a multi-threaded environment, while Hashtable is thread-safe.
TreeMap
TreeMap stores keys in order,
HashTable
(1) Hashtable is a hash table, and the content it stores is the key Value pair (key-value) mapping.
(2) Hashtable inherits from Dictionary and implements Map, Cloneable, and java.io.Serializable interfaces.
(3) Hashtable functions are all synchronous, which means it is thread-safe. Neither its key nor value can be null.
Differences between several commonly used classes
1. ArrayList: Single element, high efficiency, mostly used for query
2. Vector: Single element, thread-safe, mostly used for query
3. LinkedList: Single element, mostly used for insertion and deletion
4. HashMap: elements are in pairs, and elements can be empty
5. HashTable: Elements are in pairs, thread-safe, elements cannot be empty
Vector, ArrayList and LinkedList
In most cases, ArrayList is the best in terms of performance, but when the elements in the collection need LinkedList will perform better when inserting and deleting frequently, but the performance of the three of them is not as good as that of arrays. In addition, Vector is thread synchronized. Therefore:
If you can use an array (the element type is fixed and the array length is fixed), please try to use an array instead of List;
If there are no frequent deletion and insertion operations, there is no need to think too much For threading issues, give priority to ArrayList;
If used under multi-thread conditions, you can consider Vector;
If frequent deletions and insertions are required, LinkedList comes into play;
If you don’t know anything, there’s nothing wrong with using ArrayList.
Stack
The stack is a special linear list that can only be inserted and deleted at one end. It stores data according to the principle of first in, last out. The data that enters first is pushed to the bottom of the stack, and the last
data is on the top of the stack. When data needs to be read, data is popped from the top of the stack (the last data is pushed to the bottom of the stack). one read out).
Queue
A special linear table that only allows deletion operations at the front end of the table (front) and insertion operations at the back end (rear) of the table.
The end that performs the insertion operation is called the tail of the queue, and the end that performs the deletion operation is called the head of the queue. When there are no elements in the queue, it is called an empty queue.
Array
In programming, for the convenience of processing, several variables of the same type are organized in an ordered form. These collections of similar data elements arranged in order are called arrays. In C language, arrays are constructed data types. An array can be decomposed into multiple array elements, and these array elements can be basic data types or constructed types. Therefore, according to the type of array elements, arrays can be divided into various categories such as numerical arrays, character arrays, pointer arrays, and structure arrays.
Linked list
A non-continuous, non-sequential storage structure on physical storage units. The logical order of data elements is realized through the pointer link order in the linked list.
The linked list consists of a series of nodes (each element in the linked list is called a node), and the nodes can be dynamically generated at runtime. Each node consists of two parts:
One is the data field that stores data elements, and the other is the pointer field that stores the address of the next node.
Tree
A tree is a finite set K containing n (n>0) nodes, and a relationship N is defined in K. N satisfies the following conditions:
(1) There is and is only one node k0. It has no predecessor for the relationship N. K0 is called the root node of the tree. Referred to as the root (root)
(2) Except for K0, each node in k has and has only one predecessor for the relationship N.
(3) Each node in K can have m successors (m>=0) for the relationship N.
Heap
In computer science, a heap is a special tree data structure, each node has a value. Usually what we call the data structure of a heap refers to a binary heap. The characteristic of a heap is that the root node has the smallest (or largest) value, and the two subtrees of the root node are also a heap.
Hash table
If there is a record with the keyword equal to K in the structure, it must be at the storage location of f(K). Thus, the records being searched can be obtained directly without comparison. Call
this correspondence f a hash function (Hash function), and the table built based on this idea is a hash table.
Related recommendations:
java interview questions and answersThe above is the detailed content of What are the java data structures?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

There are three common methods to traverse Map in Java: 1. Use entrySet to obtain keys and values at the same time, which is suitable for most scenarios; 2. Use keySet or values to traverse keys or values respectively; 3. Use Java8's forEach to simplify the code structure. entrySet returns a Set set containing all key-value pairs, and each loop gets the Map.Entry object, suitable for frequent access to keys and values; if only keys or values are required, you can call keySet() or values() respectively, or you can get the value through map.get(key) when traversing the keys; Java 8 can use forEach((key,value)->

Optional can clearly express intentions and reduce code noise for null judgments. 1. Optional.ofNullable is a common way to deal with null objects. For example, when taking values ??from maps, orElse can be used to provide default values, so that the logic is clearer and concise; 2. Use chain calls maps to achieve nested values ??to safely avoid NPE, and automatically terminate if any link is null and return the default value; 3. Filter can be used for conditional filtering, and subsequent operations will continue to be performed only if the conditions are met, otherwise it will jump directly to orElse, which is suitable for lightweight business judgment; 4. It is not recommended to overuse Optional, such as basic types or simple logic, which will increase complexity, and some scenarios will directly return to nu.

The core workaround for encountering java.io.NotSerializableException is to ensure that all classes that need to be serialized implement the Serializable interface and check the serialization support of nested objects. 1. Add implementsSerializable to the main class; 2. Ensure that the corresponding classes of custom fields in the class also implement Serializable; 3. Use transient to mark fields that do not need to be serialized; 4. Check the non-serialized types in collections or nested objects; 5. Check which class does not implement the interface; 6. Consider replacement design for classes that cannot be modified, such as saving key data or using serializable intermediate structures; 7. Consider modifying

In Java, Comparable is used to define default sorting rules internally, and Comparator is used to define multiple sorting logic externally. 1.Comparable is an interface implemented by the class itself. It defines the natural order by rewriting the compareTo() method. It is suitable for classes with fixed and most commonly used sorting methods, such as String or Integer. 2. Comparator is an externally defined functional interface, implemented through the compare() method, suitable for situations where multiple sorting methods are required for the same class, the class source code cannot be modified, or the sorting logic is often changed. The difference between the two is that Comparable can only define a sorting logic and needs to modify the class itself, while Compar

To deal with character encoding problems in Java, the key is to clearly specify the encoding used at each step. 1. Always specify encoding when reading and writing text, use InputStreamReader and OutputStreamWriter and pass in an explicit character set to avoid relying on system default encoding. 2. Make sure both ends are consistent when processing strings on the network boundary, set the correct Content-Type header and explicitly specify the encoding with the library. 3. Use String.getBytes() and newString(byte[]) with caution, and always manually specify StandardCharsets.UTF_8 to avoid data corruption caused by platform differences. In short, by

There are three common ways to parse JSON in Java: use Jackson, Gson, or org.json. 1. Jackson is suitable for most projects, with good performance and comprehensive functions, and supports conversion and annotation mapping between objects and JSON strings; 2. Gson is more suitable for Android projects or lightweight needs, and is simple to use but slightly inferior in handling complex structures and high-performance scenarios; 3.org.json is suitable for simple tasks or small scripts, and is not recommended for large projects because of its lack of flexibility and type safety. The choice should be decided based on actual needs.

Method reference is a way to simplify the writing of Lambda expressions in Java, making the code more concise. It is not a new syntax, but a shortcut to Lambda expressions introduced by Java 8, suitable for the context of functional interfaces. The core is to use existing methods directly as implementations of functional interfaces. For example, System.out::println is equivalent to s->System.out.println(s). There are four main forms of method reference: 1. Static method reference (ClassName::staticMethodName); 2. Instance method reference (binding to a specific object, instance::methodName); 3.

How to quickly create new emails in Outlook is as follows: 1. The desktop version uses the shortcut key Ctrl Shift M to directly pop up a new email window; 2. The web version can create new emails in one-click by creating a bookmark containing JavaScript (such as javascript:document.querySelector("divrole='button'").click()); 3. Use browser plug-ins (such as Vimium, CrxMouseGestures) to trigger the "New Mail" button; 4. Windows users can also select "New Mail" by right-clicking the Outlook icon of the taskbar
