Java集合总结(二)
来源:互联网 发布:linux fm驱动 编辑:程序博客网 时间:2024/05/29 10:53
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("壹"));
阅读全文
0 0
- Java集合总结(二)
- Java集合总结(二)
- java集合总结(二)
- java集合总结二
- JAVA知识点总结(二)集合框架
- java常用集合总结(二)
- JAVA集合学习总结(二)
- java集合框架(二)-HashMap总结
- java集合框架总结(二)
- Java知识总结-集合二
- java基础知识总结(二)--集合
- Java集合类的混淆点总结(二)
- Java基础总结(二)----集合、多线程、io、虚拟机等
- java集合总结(二)-各类关系与注意事项
- java集合(二)
- Java集合(二)
- Java集合(二)
- JAVA---------集合(二)
- 使用Java 8 的日期和时间Api
- spring AOP---【小白系列】0基础到熟练应用spring框架(三)
- 洛谷P1008 三连击
- hdu5701中位数计数(百度之星)
- 考试排名
- Java集合总结(二)
- 黑马商城项目(三)之一
- 伪类
- 3838. 【NOIP2014模拟9.14】Super Big Stupid Cross
- 从控制台输入字符 统计该字符"e"所出现的个数
- COCI 2010/2011 6th round--ABECEDA【拓扑排序】【字符串处理】
- C++基础-类与对象
- as3实现XML中特殊字符的转义还原
- UART寄存器详解