Java 中的集合框架
List 接口
List接口中的元素的特点:
List中的元素有序,可以重复。两个常用的实现类ArrayList和LinkedList.
1.ArrayList
底层是数组形式存储,访问数度快,增删慢,线程不安全。 Vector是ArrayList的多线程的一个替代品。
2.LinkedList
类似链表结构,查询慢,增删快,线程不安全。
如图所示:
1.ArrayList的常用操作:
ArrayList类 的增删改查操作:
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
//增加
ArrayList list= new ArrayList();
list.add(" 曹操");
list.add(" 刘备");
list.add(2, "张飞");
System.out.println(list);
ArrayList sublist = new ArrayList();
sublist.add(" 张三");
sublist.add("李四");
list.addAll(1, sublist);
System.out.println(list);
//删除指定元素
list.remove("张三");
System.out.println(list);
//根据索引删除
list.remove(2);
list.remove(2);
System.out.println(list);
//批量删除
list.removeAll(sublist);
System.out.println(list);
//修改
list.set(0, "王五");
System.out.println(list);
//查看
ArrayList li = new ArrayList();
li.add("小明");
li.add("小王");
li.add("小李");
li.add("小张");
list.addAll(li);
list.add("1小吕");
//根据索引查看
System.out.println(list.get(1));
System.out.println(list);
//显示第一次出现的位置
System.out.println(list.indexOf("1小吕"));
//显示最后一次出现的位置
System.out.println(list.lastIndexOf("小明"));
//查看指定元素最后一个不显示
System.out.println(list.subList(1, 3));
}
}
2.LinkedList的常用操作:
public class Test{
public static void main(String args[]) {
// 创建类链接列表的对象
LinkedList<String> object = new LinkedList<String>();
// 将元素添加到链接列表
object.add("A");
object.add("B");
object.addLast("C");
object.addFirst("D");
object.add(2, "E");
object.add("F");
object.add("G");
System.out.println("Linked list : " + object);
// 从链接列表中删除元素
object.remove("B");
object.remove(3);
object.removeFirst();
object.removeLast();
System.out.println("Linked list after deletion: " + object);
// 在链表中查找元素
boolean status = object.contains("E");
if(status)
System.out.println("List contains the element 'E' ");
else
System.out.println("List doesn't contain the element 'E'");
// 链表中的元素数
int size = object.size();
System.out.println("Size of linked list = " + size);
// 从链接列表中获取和设置元素
Object element = object.get(2);
System.out.println("Element returned by get() : " + element);
object.set(2, "Y");
System.out.println("Linked list after change : " + object);
}
}
LInkedList链表结构中 Node 及 递归的使用方法:
具体如下:
引入Node类:
public class Node {
private Object data;
private Node node;
public Node() {
}
public Node(Object data, Node node) {
this.data = data;
this.node = node;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getNode() {
return node;
}
public void setNode(Node node) {
this.node = node;
}
}
//主程序 main方法
public class Text {
public static void main(String[] args) {
Node node = new Node("周瑜", null);
node = new Node("张飞", node);
node = new Node("关羽", node);
node = new Node("刘备", node);
node = new Node("曹操", node);
node = new Node("刘表", node);
String res = getKey("刘备1", node);
System.out.println(res);
}
/**
* @param key 要查找得key
* @param node 查哪一个节点
* @return
*/
public static String getKey(String key, Node node) {
if (node.getData().equals(key)) {
return "找到了";
}
if (node.getNode() != null) {
return getKey(key, node.getNode());
} else {
return "没有找到";
}
}
}