ArrayLists
From charlesreid1
Array-based list data structure.
Java
Built-in ArrayList type
Java Collections uses built-in array-based list structure, ArrayList<>. Link: https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
Bringing the Python List to Java
Here is an implementation of a Python list in Java, which is pretty close in style to the Python list, which works transparently with any data so long as they have matching types.
https://git.charlesreid1.com/cs/java/src/master/arrays/python-list/PythonList.java
public class PythonList {
public static void main(String[] args) {
PythonList p = new PythonList();
Random r = new Random();
int n = 50;
for(int i=0; i<100; i++ ) {
p.append(r.nextInt(6)+1);
System.out.println(p);
}
System.out.println(p);
}
///////////////////////////////////////////////////
final private int INITCAP = 10;
private Object[] data;
public int length;
public PythonList() {
length = 0;
data = new Object[INITCAP];
}
public Object get(int ix) {
return data[ix];
}
public void append(Object o) {
if(data.length==length) {
resize(data.length*2);
}
data[length] = o;
length++;
}
public void remove(int rmi) {
if(rmi>=length) {
throw new ArrayIndexOutOfBoundsException("Error accessing index "+rmi);
}
data[rmi] = null;
for(int i=rmi; i<length; i++) {
data[i] = data[i+1];
}
length--;
if(length<(data.length/4)) {
resize(data.length/2);
}
}
private void resize(int newcap) {
Object[] newarr = new Object[newcap];
for(int i=0; i<length; i++ ) {
newarr[i] = data[i];
}
data = newarr;
}
public String toString() {
return Arrays.toString(data);
}
}
Python
The essence of this class is that it is a dynamically sizable, array-based structure. In the Goodrich Python book, the array-based list, emulating the built-in Python list type, is covered in Chapter 3 - the first data structure you learn about in Python is a list. It's a wonderfully simple data container. The Java version of Goodrich doesn't get around to implementing your own array-based list type until Chapter 6!
Here is an implementation of a few of the concepts from Chapter 3 in the form of the DynamicArray class, which emulates the built-in, array-based list type in its simple design: https://git.charlesreid1.com/cs/python/src/master/arrays/DynamicArray.py
This implementation uses the ctype module to access a low-level array of Python Objects.
import ctypes
class DynamicArray:
"""
A dynamic array class that works like a list.
"""
.........snip............
def _resize(self,c):
""" Resize to capacity c (private)"""
print("Resizing array: {0:4d} elements, {1:5d} capacity".format(self._n,c))
B = self._make_array(c) # bigger array
for k in range(self._n):
B[k] = self._A[k] # copy existing elements only
self._A = B # forget the old array
self._capacity = c # update capacity
def _make_array(self,n):
"""Make the internal array (private)"""
return (n*ctypes.py_object)()
Flags
| Linked List Part of Computer Science Notes
Series on Data Structures Java: Linked Lists/Java · Linked Lists/Java/Single · Linked Lists/Java/Double · Linked Lists/Java/Circular Performance: Linked Lists/Java/Timing · Linked Lists/Java/Reverse Python: Linked Lists/Python · Linked Lists/Python/Single
|