安卓集训营第六天---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
原创粉丝点击