java的框架和集合
来源:互联网 发布:圣剑网络 奥特曼 编辑:程序博客网 时间:2024/05/22 20:57
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">一:java框架集合的由来:</span>
对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定。
就使用集合容器进行存储。java集合可以保存具有映射关系的关联数组,集合容器因为内部的数据结构不同,有多种具体容器。
不断的向上抽取,就形成了集合框架。所有的集合都位于java.util包下
二:java集合的特点:
集合特点:
1,用于存储对象的容器。
2,集合的长度是可变的,这一点是与数组不同的
3,集合中不可以存储基本数据类型值。 、
4,集合可以存储具有映射关系的数据
三:java集合可以分为三大体系
Collection(List 、Set)、Map
List:代表有序、重复的集合
Set:代表无序、不重复的集合
Map:代表有映射关系的集合
3.比较
说明:实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等。
四:Collection
4.1 Collection接口的基本方法
Collection接口是List、Set、Queue的父接口,所以Collection里面定义的方法在List、Set里面都是使用的;
对于学习Collection接口的基本方法,查API还是特别的重要
Collection的基本方法包括:
1:添加
boolean add(Object obj)添加一个类元素到集合对象中去
boolean addAll(Collection coll);把一个集合添加到集合中去;
2:删除
boolean remove(Object obj);删除指定的元素
boolean removeAll(Collection coll); 移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
void clear()删除集合中的所有的元素;
3:判断:
boolean contains(object obj);判断集合中是否包含某元素;
boolean containsAll(Collection coll);判断此集合中是否包含指定集合中的元素;
boolean retainAll(Collection coll);仅保留与指定集合中相同的元素;
boolean isEmpty(Collection coll);判断集合中的元素是否为空;
boolean equals(Object obj):判断此对象是否与指定的对象相同;
int
4:获取:
Iterator iterator();:取出元素的方式:迭代器。
返回在此Collection集合上进行迭代的迭代器,用于遍历集合中的元素;
int hashCode()返回此Collection的哈希值码
该对象必须依赖于具体容器,因为每一个容器的数据结构都不同。
所以该迭代器对象是在容器中进行内部实现的。
对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可,
也就是iterator方法。
5:其他
Object[] toArray():将集合转成数组。
4.2List集合
1:List是有序的,而且允许集合中的元素重复
2:list集合是可以完成对元素的增删改查。
List:特有的常见方法:有一个共性特点就是都可以操作角标。
1,添加
void add(index,element);
void add(index,collection);
2,删除;
Object remove(index):
3,修改:
Object set(index,element);
4,获取:
Object get(index);
int indexOf(object);返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1
int lastIndexOf(object);返回此列表中最后一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1
List subList(from,to); 返回列表中指定的fromIndex(包括 )和 toIndex(不包括)之间的部分视图
list集合是可以完成对元素的增删改查。
public class ListDemo {/** * @param args */public static void main(String[] args) {List list = new ArrayList();show(list);}public static void show(List list) {//添加元素list.add("abc1");list.add("abc2");list.add("abc3");System.out.println(list);//插入元素。//list.add(1,"abc9");//删除元素。//System.out.println("remove:"+list.remove(2));//修改元素。//System.out.println("set:"+list.set(1, "abc8"));//获取元素。//System.out.println("get:"+list.get(0));//获取子列表。//System.out.println("sublist:"+list.subList(1, 2));System.out.println(list);}}
List:
|--Vector:内部是数组数据结构,是同步的。增删,查询都很慢!
|--ArrayList:内部是数组数据结构,是不同步的。替代了Vector。查询的速度快。
|--LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快。
Vector中特有的:
Enumeration<E>
elements()
返回此向量的组件的枚举。
这方法相当于是iterator
Vector是jdk1.0版本就已经存在了了,但是由于增删,查询的速度很慢所以现在一般都不用
ArrayList允许有重复的元素,而且在用ArrayList进行输出的时候sys0(会自动的)进行Tostring()类型的转化;
p<span style="font-size:18px;">ackage cn.itcast.p4.ArrayList;import java.util.ArrayList;import java.util.Iterator;import cn.itcast.pb.bean.Person;public class ArrayListTest {public static void main(String[] args) {// TODO Auto-generated method stubArrayList a1=new ArrayList();a1.add(new Person("zhangsan",24));a1.add(new Person("lisi",23));a1.add(new Person("wangwu",26));a1.add(new Person("zhaoliu",28));a1.add(new Person("xiaoqiang",29));Iterator it = a1.iterator();while(it.hasNext()){//System.out.println(((Person) it.next()).getName()+"::"+((Person) it.next()).getAge());Person p = (Person) it.next();System.out.println(p.getName()+"--"+p.getAge());}}}</span>
4.2Set集合
4.2.1:hashSet集合是无序的,但是不允许有重复的元素;
此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null 元素。
4.2.2LinkedhashSet
此类实现的是有序的set集合;
4.2.3hashSet集合中添加的自定义类型的变量时候需要复写hashcode和equals方法;
HashSet: 内部数据结构是哈希表 ,是不同步的。
如何保证该集合的元素唯一性呢?
是通过对象的hashCode和equals方法来完成对象唯一性的。
如果对象的hashCode值不同,那么不用判断equals方法,就直接存储到哈希表中。
如果对象的hashCode值相同,那么要再次判断对象的equals方法是否为true。
如果为true,视为相同元素,不存。如果为false,那么视为不同元素,就进行存储。
package cn.itcast.p4.hashset.test;import java.util.HashSet;import java.util.Iterator;import cn.itcast.p.bean.Person;/* * 往hashSet集合中存储Person对象。如果姓名和年龄相同,视为同一个人。视为相同元素。 */public class HashSetTest {/** * @param args */public static void main(String[] args) {HashSet hs = new HashSet();/* * HashSet集合数据结构是哈希表,所以存储元素的时候, * 使用的元素的hashCode方法来确定位置,如果位置相同,在通过元素的equals来确定是否相同。 * */hs.add(new Person("lisi4",24));hs.add(new Person("lisi7",27));hs.add(new Person("lisi1",21));hs.add(new Person("lisi9",29));hs.add(new Person("lisi7",27));Iterator it = hs.iterator();while(it.hasNext()){Person p = (Person)it.next();System.out.println(p);//System.out.println(p.getName()+"...."+p.getAge());}}}
package cn.itcast.pb.bean;public class Person {private String name;private int age;public Person() {super();// TODO Auto-generated constructor stub}<span style="color:#ff0000;"><strong>public int hashCode() {//System.out.println(this+".......hashCode");return name.hashCode()+age*27;//return 100;}</strong></span>@Override<span style="color:#ff0000;"><strong>public boolean equals(Object obj) {if(this == obj)return true;if(!(obj instanceof Person))throw new ClassCastException("类型错误");//System.out.println(this+"....equals....."+obj);Person p = (Person)obj;return this.name.equals(p.name) && this.age == p.age;}</strong></span>public Person(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}// TODO Auto-generated method stub}
4.2.4TreeSet
使用元素的自然顺序对元素进行排序,可以对set集合中的集合按照指定的顺序进行排序;不同步的
如果添加自定义的元素需要复写CompareTo方法:
TreeSet:可以对Set集合中的元素进行排序。是不同步的。
判断元素唯一性的方式:就是根据比较方法的返回结果是否是0,是0,就是相同元素,不存。
TreeSet对元素进行排序的方式一:
让元素自身具备比较功能,元就需要实现Comparable接口。覆盖compareTo方法。
如果不要按照对象中具备的自然顺序进行排序。如果对象中不具备自然顺序。怎么办?
可以使用TreeSet集合第二种排序方式二:
让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法。
将该类对象作为参数传递给TreeSet集合的构造函数。
TreeSet ts = new TreeSet(new ComparatorByName());
自定义的比较器,根据自己定义的方式进行定义;
public int compareTo(Object o) {Person p = (Person)o;int temp = this.age-p.age;return temp==0?this.name.compareTo(p.name):temp;//int temp = this.name.compareTo(p.name);//return temp==0?this.age-p.age:temp;/*if(this.age>p.age)return 1;if(this.age<p.age)return -1;else{return this.name.compareTo(p.name);}*/}
package cn.itcast.p5.comparator;import java.util.Comparator;import cn.itcast.pb.bean.Person;public class ComparatorByName implements Comparator {@Overridepublic int compare(Object o1, Object o2) {Person p1 = (Person)o1;Person p2 = (Person)o2;int temp = p1.getName().compareTo(p2.getName());return temp==0?p1.getAge()-p2.getAge(): temp;//return 1;//有序。}}
用元素的自然顺序对元素进行排序,使用的是二叉树的结构进行的排序的。
- java的框架和集合
- JAVA集合框架和集合
- Java集合框架和数组的排序
- java--集合框架的Hashset和Treeset
- Java的集合框架
- Java的集合框架
- java的集合框架
- Java的集合框架
- Java的集合框架
- JAVA的集合框架
- Java的集合框架
- java的集合框架
- JAVA的集合框架
- [集合]Java的集合框架 Collection集合
- java集合框架-List和Set和相关的方法
- java集合框架TreeSet的使用和HashSet的使用
- java 集合框架(Collection)和数组的排序
- java 集合框架(Collection)和数组的排序
- 【bzoj 1087】[SCOI2005]互不侵犯King 状压dp
- 与其说大学欠我一个贝薇薇,倒不如说自己没有活成肖奈
- 左程云著算法与数据结构题目最优解笔记-删除无序链表中重复的元素
- java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast
- 合唱队-华为OJ
- java的框架和集合
- FFT模板
- Mac平台重新设置MySQL的root密码
- 40条Android开发优化建议
- 自己写bootloader笔记7---Makefile分析
- 使用LayoutInflate(视图扩充器)
- PsychoPy入门_02_按键等待&反应时
- 关于使用opencv的提速(二)(多线程问题,openMP)
- POJ2503 Babelfish 二分 TWT Tokyo Olympic 1 COMBO-1