您的位置:首页 > 编程语言 > Java开发

Java集合总结(二)

2017-07-12 21:52 232 查看

List接口实现类

一. ArrayList

特征:

1.允许添加添加null,可以存储重复数据,有序的,底层是数组结构增删慢,查询快。是非线程安全的。


// 1.初始化
ArrayList<Book> arr = new ArrayList<Book>();

// 2. 允许添加 null,可以有重复数据,是有序的,底层是数组结构
arr.add(null);
arr.add(new Book("java",79.8));
arr.add(new Book("java",79.8));
arr.add(new Book("Android",59.8));
System.out.println(arr);


输出数据:

[null, Book [name=java, price=79.8], Book [name=java, price=79.8], Book [name=Android, price=59.8]]


2.删除数据依赖于存储对象的equals()方法


Book类没有覆写equals()方法时:

// 1.初始化
ArrayList<Book> arr = new ArrayList<Book>();
// 2. 删除数据依赖于存储对象的equals()方法
arr.add(new Book("java",79.8));
arr.add(new Book("java",79.8));
arr.add(new Book("Android",59.8));
arr.remove(new Book("java",79.8));
System.out.println(arr);

输出结果:发现remove()方法并没有生效

[Book [name=java, price=79.8], Book [name=java, price=79.8], Book [name=Android, price=59.8]]


Book类覆写equals()方法后:

输出结果:最后一句remove()方法生效了

[Book [name=java, price=79.8], Book [name=Android, price=59.8]]


3.常用方法示例:


// 1.初始化
ArrayList<Book> arr = new ArrayList<Book>();
ArrayList<Book> arr1 = new ArrayList<Book>();
arr1.add(new Book("arr1->壹",1));
arr1.add(new Book("arr1->贰",2));
arr1.add(new Book("arr1->叁",3));

// 2. 添加数据
arr.add(new Book("壹",1));
arr.add(new Book("贰",2));

// 3.向指定位置添加数据
arr.add(0, new Book("插",0));

// 4.取出指定位置的数据
System.out.println(arr.get(0));

// 5.可以添加集合
//      arr.addAll(arr1);

// 6. 向指定位置添加集合
arr.addAll(1, arr1);
System.out.println("------添加后------");

// 迭代器输出
Iterator<Book> iterator = arr.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}

// 7.判断是否包含某对象,包含返回true
boolean contains = arr.contains(new Book("壹",1));
System.out.println(contains);

// 8.判断是否包含某集合
boolean containsAll = arr.containsAll(arr1);
System.out.println(containsAll);

// 9.返回集合大小
System.out.println(arr.size());

// 10.清空集合
//      arr.clear();
System.out.println(arr.size());

// 11.判断集合是否为空
System.out.println(arr.isEmpty());


二. Vector

使用方法与ArrayList一样,不同的是,该方法是线程安全的


三. 集合的四种输出方式

// 1.初始化
ArrayList<Book> arr = new ArrayList<Book>();
Vector<Book> vector = new Vector<Book>();
vector.add(new Book("arr1->壹",1));
vector.add(new Book("arr1->贰",2));
vector.add(new Book("arr1->叁",3));

// 2. 添加数据
arr.add(new Book("壹",1));
arr.add(new Book("贰",2));

arr.addAll(vector);

// 四种输出方式:
System.out.println("-----1.迭代器输出(Conllection都有)-----");
Iterator<Book> iterator = arr.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
System.out.println("-----2.forEach输出(底层是迭代器实现)-----");
for (Book book : arr) {
System.out.println(book);
}
System.out.println("-----3.双向输出(List接口独有)-----");
ListIterator<Book> listIterator = arr.listIterator();
while(listIterator.hasNext()) {
System.out.println(listIterator.next());
}
System.out.println("-----必须先从前遍历,否则反向遍历没有输出结果-----");
while(listIterator.hasPrevious()) {
System.out.println(listIterator.previous());
}
System.out.println("-----4.Enumeration输出(Vector独有)-----");
Enumeration<Book> elements = vector.elements();
while(elements.hasMoreElements()) {
System.out.println(elements.nextElement());
}


四. Stack

描述

Vector的子类,表示后进先出的数据结构(栈)

常用方法

// 1.初始化
Stack<Book> stack = new Stack<Book>();

// 2. 入栈
stack.push(new Book("壹",1));
stack.push(new Book("贰",2));
stack.push(new Book("叁",3));

// 3.查看栈顶元素并返回它,不移除它(空栈会报异常:EmptyStackException)
System.out.println(stack.peek());

// 4.测试堆栈是否为空
System.out.println(stack.empty());

// 5.移除栈顶元素并返回它
//      System.out.println(stack.pop());

// 6.查找元素在栈内位置(返回值 -1 表示此对象不在堆栈中,栈顶元素位置为 1)
System.out.println(stack.search(new Book("叁",3)));


Set接口实现类

一.HashSet

非线程安全

底层由哈希表支持

保证数据唯一(依靠equals()和hashCode()方法)

无序的

允许使用null值

二.TreeSet

非线程安全

底层是二叉树结构

该类集存储的对象需要实现Comparable接口覆写compareTo()方法

Map接口

Map接口主要用来存储键值对

此接口提供一个内部嵌套接口Map.Entry

自定义类作为key必须覆写hashCode()和equals()方法

无序的

一. HashMap

非线程安全

允许键或值为null

二. HashTable

线程安全的

不允许键或值为null

使用范例:

// 初始化
HashMap<String, Integer> map = new HashMap<>();

// 1. 添加元素
map.put("壹", 1);
map.put("贰", 2);
map.put("叁", 3);

// 2.根据键取值
System.out.println(map.get("贰"));

// 3.遍历
Iterator<Entry<String, Integer>> iterator = map.entrySet().iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}


三. Properties

用来作为配置文件

文件后缀名*.properties

HashTable的子类

用来存储字符串

范例:

// 初始化
Properties p = new Properties();

// 设置属性
//      p.setProperty("壹", "1");
//      p.setProperty("贰", "2");
//      p.setProperty("叁", "3");

// 取属性
System.out.println(p.getProperty("壹"));

// 将属性列表输出到指定的输出流
File file = new File("D:"+File.separator+"demo.properties");
//      p.list(new PrintStream(new FileOutputStream(file)));

// 从输入流中读取属性列表
p.load(new FileReader(file));
System.out.println(p.getProperty("壹"));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据 集合框架