安卓集训营第六天---JAVA的集合
来源:互联网 发布:科勒有几家网络授权店 编辑:程序博客网 时间:2024/05/18 02:33
Collection接口(存储元素值)
1. 支持Iterable(迭代器)接口,无序可重复;
2. Collection.toArray();转换成Object数组;
Collection.toArray(T []):转换成f泛型类型数组;
泛型:为了在编译时检查类型,避免运行时才发现加入的类型不对;
例如:
List<String> list = new ArrayList<String>();
//list.add(100); // 1 提示编译错误
3.Set,List,Queue都实现了Collection接口;
Set 接口
1. 无序,不可重复,List有序可重复
2. List可重复添加相同数据,set只能添加一次
set无索引值,即使顺序输出也是无序的(但存储的为位置固定)
Hashset
Treeset
HashSet与TreeSet区别:?
1、TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值?
2、HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束?
3、HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的String对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例
List接口(继承了Collection接口):
1. List和数组都是存储相同数据的集合;
List长度可变,数组行都不可变;
2. List三种遍历模式:
一般for循环: List.get(i);
增强for循环: For(string s : list ){system.out.println(s)};
迭代器实现:
Iterator< String > iterator = list.iterator();
While (iterator.hasNext () ) {
System.out.println (iterator.next() ) ;
}
Limbda语法实现:
List.foEach(system.out::println);(1.8以后,安卓暂不能用)
化简前的样子:list.forEach( s ->System.out.println (s)) ;
3. List删除进位:
List数组删除掉某位后,该位置后面的值会自动进位填补前面被删除的位置;
删除不能被3整除的数:
List<Entry> removes = new ArrayList<>();
for (Entry entry : list) {
if (entry.getIndex() % 3 != 0) {
removes.add(entry);
}
}
list.removeAll(removes);
list.removeIf(e -> e.getIndex() % 3 != 0);
for (Entry entry : list) {
System.out.println(entry);
}
4. ArrayList : 数据存在数组当中;查找快,添加慢;
linkList : 数据存储在链表中;节点:数值域和指针域;添加删除数据快,查找慢
5. Vector<>List的子类。和ArrayList类似,但线程安全
6. List.remove("第999条"); 删除语句,删除不了返回false;
7. Jdk1.8之后有List类,但是是在awt包下,绘制图形用的;
8. List是一个接口,而ArrayList是一个类,它实现了List接口。
所以List不能被构造,List list=new List()这种写法是错误的,而ArrayList就可以被构造。
List list = new ArrayList();这句创建了一个ArrayList的对象后把向上转型成了List。此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。?
而ArrayList list=new ArrayList();创建一对象则保留了ArrayList的所有属性。
Queue(队列)接口:
1. ava中的queue类是队列数据结构管理类。在它里边的元素可以按照添加它们的相同顺序被移除。
2. Queue<Integer> queue = new ArrayDeque<>();
queue.add(1);
queue.add(2);
queue.add(3);
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println("size:" + queue.size());
返回结果:1 2 3 0
3. poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null
A. Stack(栈)类:
1. Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack.get(0));
System.out.println(stack.get(1));
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println("size:" + stack.size());
2. 为Stack类;
boolean empty()
测试堆栈是否为空。
E peek()
查看堆栈顶部的对象,但不从堆栈中移除它。
E pop()
移除堆栈顶部的对象,并作为此函数的值返回该对象。
E push(Eite m)
把项压入堆栈顶部。
int search(Object o)
返回对象在堆栈中的位置,以 1 为基数。
Integer和Int的区别:
1. int 是基本数据类型;
Integer是其包装类,注意是一个类。
2. 为什么要提供包装类呢???
一是为了在各种类型间转化,通过各种方法的调用。否则 你无法直接通过变量转化。
比如,现在int要转为String
int a=0;
String result=Integer.toString(a);
在java中包装类,比较多的用途是用在于各种数据类型的转化中。
3. 比如我现在要用泛型
List<Integer> nums;
这里<>需要类。如果你用int。它会报错的
compareTo和compare的区别
compareTo是Compareable接口的一个方法,主要用于规定创建对象的大小关系,该对象要实现compareable接口, 当a.compareTo(b)>0时,则a>b, 当a.compareTo(b)<0时, a<b.
compare方法是java.util中的Comparator接口的一个方法,compare方法内主要靠定义compareTo规定的对象大小关系来确定对象的大小。
Map 接口
1. 键值对存储,无序;key通常为String;
Key不能重复,可以为空;Value无限制,可重复;
2. Map的两种遍历
Key遍历
Set<String > keySet = map.keySet();
For(String s : keySet){
System.out.println("key:"+ s );
System.out.println("Value:"+ map.get(s));
}
entry遍历
Set<Map.Entry<String , String >> entries = map.entrySet () ;
For ( Map.Entry <String , String > entry : entries){
System.out.println("key:"+ entry.getkey() );
System.out.println("Value:"+ entry.getValue());
}}
3. Map.Put(k,v) 存入键值对
Map.Get(k) 获取键值对
Map.Keyset() 返回set队列
Map.Put()可代替replace(),返回被替换的Value
Map.Remove(value)返回删除的Value
Value判断是否相同时只用equles(),不用hashcode();
Collections工具类
binarySearch()二分查找,效率高,但必须是升序,找出值得位置,返回的负数的话,不存在,
泛型:
拆箱装箱:基本数据据类型和包装类相互转换
1. 直接声明,此时可以声明类型,也可以在<>写T暂不声明;
2. 继承时声明,此处也可声明类型;
Public class StringTree extends TreeNode< String >{}
3. 在方法中定义泛型;
Public static <E> void getInstance( Class <E> c ) {}
泛型可以在方法中使用
写在返回类型前
4. 声明可比较的泛型
Public class TreeNode <T extends Comparable<T>>{}
Compareable<T>后面的参数是指可比较的范围
TreeNode必须具备可比较性
泛型只能继承,不能实现
5. Public TreeNode<? Extends T > getLeft() {
}
泛型可以是T的子类
Xml Json
Xml:可扩展的可标记语言
Json:JavaScript 对象表示法,数据交换语言
0 0
- 安卓集训营第六天---JAVA的集合
- 安卓集训营第二天---JAVA的循环,递归
- 安卓集训营第七天---JAVA的IO流
- 安卓集训营第八天---JAVA的线程
- 安卓集训营第一天---JAVA的标识符,运算符和数据类型
- 安卓集训营第五天---JAVA的Object类,String类和正则表达式
- 安卓集训营第四天---JAVA基础数组和排序,枚举,内部类
- 集训第六天
- 安卓学习第六天
- 安卓学习第六天
- 暑假集训 第六天了
- 2017暑假集训第六天
- 西安集训第六天-----一般的数据结构知识
- 安卓集训营第三天---JAVA面向对象,类,抽象类和接口
- 我的安卓学习之路--java集合
- 安卓第六天笔记--ListView
- [安卓基础]学习第六天
- 2017.8.5暑假集训第六天
- Linux网络命令--ping和ifconfig命令
- hihocoder 1049 : 后序遍历
- 258 Add Digits
- android 使用DrawerLayout实现滑动抽屉
- 方格填数
- 安卓集训营第六天---JAVA的集合
- Android:LinearLayout布局中Layout_weight的深刻理解
- Effective C++ Item 02-尽量以const、enum、inline替换#define
- 前端代码异常日志收集与监控
- 从键盘输入某个十进制整数数,转换成对应的二进制整数并输出。
- 【bzoj 3832】 [Poi2014] Rally (权值线段树+拓扑排序)
- Android 中创建Java项目的Date的转换工具
- 77.A problem is easy
- WIN7_64搭建CUDA开发环境