黑马程序员--java基础--集合框架
来源:互联网 发布:python分布式框架 编辑:程序博客网 时间:2024/04/29 04:57
目录:1、体系概述 2、迭代器3、list集合共性方法 4 、List集合具体对象的特点 5、Set集合6、Map集合
1、集合框架:体系概述
为了方便对多个对象的操作,就对对象进行存储,集合就是
存储对象最常用的一种方式
集合只用于存储对象,集合的长度是可变的,集合可以存储不同类型的对象
在看一个体系的时候,要看体系的最顶层,因为顶层当中定义的是体系中最基本,最共性的东西
Collection有两个常见的子接口,一个是List(ArrayList,LinkedList,vector)一个是Set(HashSet,TreeSet)
2、集合框架:迭代器
iterator():返回此collection的元素上进行迭代的迭代器,它的返回值类型是一个接口Iterator
Iterator接口中定义了三个方法:1 hasNext() 如果仍有元素可以迭代,则返回true
2 next() 返回迭代的下一个元素
3 remove() 从迭代器执行的collection中移除迭代器返回的最后一个元素
//迭代器的基本使用class CollectionDemo{ public static void main(String[] args) { method_get(); } public static void method_get() { ArrayList al = new ArrayList(); al.add("java01");//add(Object obj) al.add("java02"); al.add("java03"); al.add("java04");/* Iterator it = al.iterator();//获取迭代器,用于取出集合中的元素. while(it.hasNext())//加hasNext()的方法的原因是,只要有可以迭代的元素就返回true { sop(it.next()); } */ //老外不喜欢这样的书写方式,这儿写while循环也行 for(Iterator it = al.iterator();it.hasNext();) { sop(it.next()); } }}
3、list集合共性方法
Collection下有两个最常用的子类
List(): List也是一个抽取出来的接口,这个集合体系它里面的特点在于元素是有序的,元素可以重复,因为该集合体系有索引,所以元素可以重复
set(): 元素是无序,元素不可以重复,该集合当中没有索引
List()方法中的特有方法:凡是操作角标的都是list的特有方法
add(int index,E element): 在列表的指定位置插入指定元素
addAll(int index,Collection<?extend E> c): 将指定collection中的所有元素都插入到列表中的指定位置
get(int index): 返回列表中指定位置的元素.
indexOf(Object o): 返回此列表中最后出现的指定元素的索引,如果列表不包含此元素,则返回-1
listIterator(): 返回此列表元素的列表迭代器
remove(int index): 移除列表中指定位置的元素
remove(Object o): 从此列表中移除第一次出现的指定元素
set(int index,E element): 用指定元素替换列表中指定位置的元素.(就list方法中有这个特有方法)
subList(int fromIndex,int toIndex): 返回列表中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图
增 add(index,element)
addAll(index,Collection)
删 remove(index)
改 set(index,element)
查 get(index)
subList(from,to)
ListIterator();
4List集合具体对象的特点
list:方法中三个常见的子类对象
1 ArrayList: 底层的数据结构使用的是数组结构,特点在于,查询速度很快.但是增删较慢
2 LinkList: 底层使用的是链表数据结构.特点:增删的速度很快,查询的速度很慢
3 Vector: vector底层是数组数据结构
ArrayList和Vector的区别?
1 Vector出现在jdk1.1,较早,而ArrayList出现在1.2
2 Vector中线程同步的,而ArrayList中的线程是不同步的,在开发一般用ArrayList,因为ArrayList无论增删改查都很快
3 ArrayList的默认长度是10,如果超过该长度,会new一个数组50%延长,而Vector是100%延长
LinkedList
LinkList特有方法
addFirst(E e): 将指定元素插入此列表的开头
addLast(E e): 将指定元素添加到此列表的结尾
getFirst(): 返回此列表的第一个元素
getLast(): 返回此列表的最后一个元素
removeFirst(): 移除并返回此列表的第一个元素
removeLast(): 移除并返回此列表的最后一个元素
inmport java.util.*;class LinkListDemo{ public static void main(String[] args) { LinkedList link = new LinkedList(); link.addFirst("java01"); link.addFirst("java01"); link.addFirst("java01"); link.addFirst("java01"); sop(link); } public static void sop(Object obj) { System.out.println(obj); }}
List集合练习
List集合判断元素是否相同,依据的是元素的equals方法!其他集合不是这样的!
需求:将自定义对象作为元素存到ArrayList集合中,并去除重复元素
比如:存人对象.同姓名同年龄视为同一个人,为重复元素
思路:
1 对人描述,将数据封装进入对象
2 定义容器,将人存入
3 取出
class Person{ private String name; private int age; Person(String name, int age) { this.name= name; this.age = age; } public boolean equals(Object obj)//这里的equals是Person类中的 { if(!(obj instanceof Person)) return false; //想要程序更严谨,也可以抛异常 Person p = (Person)obj; System.out.println(this.name+"---"+p.name); return this.name.equals(p.name) && this.age == p.age;//这里是字符串中的equals } public String getName() { return name; } public void setName() { this.name = naem; } public int getAge() { return age; } public void setName() { this.age = age; }}class ArrayListTest2{ public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) { ArrayList al = new ArrayList(); al.add(new Person("lisi01",30));//al.add(Object obj);然后就相当于Object obj = new Person("lisi",30); al.add(new Person("lisi02",32)); al.add(new Person("lisi03",33)); al.add(new Person("lisi04",35)); al.add(new Person("lisi02",32)); al.add(new Person("lisi03",33)); //存完了,然后取一下,用迭代器 Iterator it = al.iterator(); while(it.hasNext()) { Object obj = it.next()//返回Object类型,因为迭代器它不知道里面放的是什么,所以要返回Obeject //想用子类特有对象,向下转型 Person p = (Person)obj; sop(it.next().getName()); /* 上述代码还可以简化为: Person p = (Person)it.next(); */ Sop(p.getName()+"---"+p.getAge()); } } //定义一个临时容器 public static ArrayList singelElement(ArrayList al) { ArrayList newAl = new ArrayList(); Iterator it = new Iterator(); while(it.hasNext()) { Object obj = it.next(); if(!newAl.contains(obj))//判断元素是否相等用contains方法 newAl.add(obj); } }}
5、Set集合
Set集合特点:无序,不可以重复
Set集合下有两个子类:
1.HashSet: 数据结构是哈希表,线程是非同步的
依据哈希表数据结构,保证元素唯一性的原理是:
判断元素的哈希值是否相同,如果相同还会继续判断元素的equals方法是否为真
2.TreeSet集合特点:可以对set集合中的元素进行排序.
重要:底层数据结构是二叉树数据结构,保证元素唯一性的依据是compareTo方法和return0 >
TreeSet排序的第一种方式: 让元素自己身上具有可比性.
让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法
这种方式也称为元素的自然顺序,或者叫做默认顺序.
TreeSet存储自定义对象
需求: 往TreeSet集合中存储自定义对象学生
想按照学生的年龄进行排序
TreeSet集合能够排序,但是传入的对象必须具备比较性,往TreeSet集合中存不入相同集合元素
import java.util.*;class TreeSetDemo{ public static void main(String[] args) { //建立TreeSet集合 TreeSet ts = new TreeSet(); ts.add(new Student("lisi02",22)); ts.add(new Student("lisi07",20)); ts.add(new Student("lisi08",19)); ts.add(new Student("lisi10",30)); //ts调用迭代器方法 Iterator it = ts.Iterator(); while(it.hasNext()) { //如果想要打印具体学生对象的话 Student stu = (Student)it.next() System.out.println(stu.getName()+"---"stu.getAge()); } }}//既然要存对象,就弄个对象出来class Student implements Comparable //该接口强制让学生类具有比较性.{ private String name; private int age; Student(String name,int age) { this.name = name; this.age = age; }//实现Comparable接口要复写其中的方法,int compareTo(Object obj) public int CompareTo(Object obj)//CompartTo方法中,传入的是任意对象. { //先判断传入的对象obj是不是Student对象 if(!(obj instanceof Student)) throw new RuntimeException('您所传入的对象不属于Student对象'); Student s = (Student)obj; if(this.age>s.age) return 1; //判断年龄是否相等 if(this.age == s.age) { //如果年龄相等,判断名字是否相同,相同则返回 return this.name.compareTo(s.name); } return -1; } public String getName() { return name; } public int getAge() { return age; }}
二叉树
排序无非就是互相比较,元素越多,你所比较的次数就越多,运行速度越慢,为了优化速度,TreeSet底层
的二叉树数据结构做这些事情
二叉树原理:在取数据的时候,从小到大取数据
二叉树就是以return 0 来判断元素是否相同
TreeSet集合的第二种排序方式:让集合具备可比性
排序有两种要素,集合和元素,当元素不具备可比性的时候,只能考虑集合具不具备可比性
当元素自身不具备比较性,或者具备的比较性不是所需要的,这时就需要让集合自身具备比较性
在集合一初始化时,就有了比较方式.
当TreeSet集合中的两种排序方式都存在时,以比较器为主.
定义一个类实现Comparator接口,覆盖compare方法
当元素自身不具备比较性,或者具备的比较性不是需要的,这时需要让容器具有比较性
这时就需要定义比较器,将比较器作为参数传递给TreeSet集合的构造函数
import java.util.*;class TreeSetDmeo2{ public static void main(String[] args) { //建立TreeSet集合 TreeSet ts = new TreeSet(new MyCompare());//new MyCompare 比较器对象 ts.add(new Student("lisi02",22)); ts.add(new Student("lisi07",20)); ts.add(new Student("lisi08",19)); ts.add(new Student("lisi10",30)); //ts调用迭代器方法 Iterator it = ts.Iterator(); while(it.hasNext()) { //如果想要打印具体学生对象的话 Student stu = (Student)it.next() System.out.println(stu.getName()+"---"stu.getAge()); } }}//写一个比较器class MyCompare implements Comparator{ //这里没必要再覆盖其equals方法,equals方法是用来健壮性的判断两个元素是否相等 public int compare(Object o1,Object o2) { Student s1 = (Student)o1; Student s2 = (Student)o2; //判断姓名是否形同,并且记录姓名排完的正数负数0 int num = return s1.getName().compareTo(s2.getName());//compareTo比较后返回的是-1,0,1 if(num == 0) { //把数字封装成对象 return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge())); /* if(s1.getAge()>s2.getAge()) return 1; if(s1.getAge()==s2.getAge()) return 0; return -1; */ } return num; }}
6、Map集合
Map的三个子类:
Hashtable:底层是哈希表数据结构,不可以存入null键,null值.该集合是同步的,JDK1.0出现的,效率低
HashMap:底层是哈希表数据结构。并允许使用null键和null值,该集合是不同步的,JDK1.2出现的,效率高
TreeMap:底层是二叉树数据结构。线程不同步。可以用于给Map集合中的键进行排序
Set底层就是使用了Map集合
Map-keySet
map集合的两种取出方式此板块着重讲keySet
1Set<k> keySet:将map中所有的键存入到Set集合,因为set具备迭代器
所有可以迭代方式取出所有的键,再根据get方法获取每一个键对应的值
Map集合的取出原理:将map集合转换成set集合,通过迭代器取出
import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;class MapTest { public static void main(String[] args) { Map<String,String> map = new HashMap<String,String>(); //添加元素 map.put("01","zhangsan01"); map.put("02","zhangsan02"); map.put("04","zhangsan04"); map.put("03","zhangsan03"); //利用KeySet方法,获取Set值 Set<String> keySet = map.keySet(); //利用Set的迭代器获取键值,注意,此处的泛型要与Set的泛型一致 Iterator<String> it = keySet.iterator(); while(it.hasNext()) { String key = it.next(); //通过键值获取Value值 String Value = map.get(key); sop("key:"+key+",Value:"+Value); } } public static void sop(Object obj) { System.out.println(obj); }}
-------android培训、java培训、期待与您交流! ----------
- 黑马程序员 Java基础<七>---> 集合框架
- 黑马程序员 java基础回顾---集合框架
- 黑马程序员---java基础---4集合框架
- 黑马程序员--java基础--集合框架
- 黑马程序员一一Java基础--集合框架
- 黑马程序员---java基础---集合框架
- 黑马程序员----java基础-------集合框架
- 黑马程序员--Java基础--集合框架
- 黑马程序员------Java基础学习------集合框架
- 黑马程序员-----Java基础-----集合框架详解
- 黑马程序员----Java基础-----集合框架(一)
- 黑马程序员-----Java基础-----集合框架(二)
- 黑马程序员-----Java基础-----集合框架(三)
- 黑马程序员-JAVA基础之集合框架
- 黑马程序员---Java基础---集合框架
- 黑马程序员-JAVA基础---集合框架
- 黑马程序员--java基础--集合框架Set,集合框架map
- 黑马程序员-基础-集合框架
- java线程:CyclicBarrier使用详解
- IOS应用开发-App升级后旧文件去留
- 【C++】高精度除法
- 《计算机文化基础》
- 原生phone应用分析
- 黑马程序员--java基础--集合框架
- 育苑追梦,春泥护花迎春风
- GraphicsPaths和Regions
- Java线程:Phaser
- 123124sdg
- 项目生命周期
- java Scanner
- sysconf
- colspan和rowsoan的效果