java集合.docx
《java集合.docx》由会员分享,可在线阅读,更多相关《java集合.docx(10页珍藏版)》请在冰豆网上搜索。
java集合
packagecn.itcast.list;
importjava.util.HashSet;
importjavax.print.attribute.HashAttributeSet;
/*
集合:
存储对象数据的集合容器。
单例集合
----------|Collection单例集合的根接口
----------------|List如果是实现了List接口的集合类,具备的特点:
有序,可重复。
-------------------|ArrayListArrayList底层是使用了Object数组实现的。
特点:
查询速度快,增删慢。
-------------------|LinkedListLinkedList底层是使用了链表数据结构实现的。
特点:
查询速度慢,增删快
-------------------|Vector底层是使用了Object数组实现的,实现原理与ArrayList是一致的,但是是线程安全的,操作效率低。
----------------|Set如果是实现了Set接口的集合类,具备的特点:
无序,不可重复。
-------------------|HashSet底层是使用了哈希表实现的。
特点:
存取速度快。
HashSet存储元素的原理:
往hashSet添加元素的时候,首先会调用元素的hashCode方法得到元素的哈希码值,然后把哈希码值经过运算算出该元素存在哈希表中的位置。
情况1:
如果算出的位置目前还没有存在任何的元素,那么该元素可以直接添加到哈希表中。
情况2:
如果算出的位置目前已经存在其他的元素,那么还会调用元素的equals方法再与这个位置上的元素比较一次。
如果equals方法返回的是true,那么该元素被视为重复元素,不允许添加。
如果equals方法返回的是false,那么该元素也可以被添加。
------------------|TreeSet底层是使用了红黑树(二叉树)数据结构实现的。
特点:
对集合中的元素进行排序存储、。
TreeSet要注意的事项:
1.往TreeSet添加元素的时候,如果元素具备自然顺序的特点,那么TreeSet会根据元素的自然顺序特性进行排序存储。
2.往TreeSet添加元素的时候,如果元素不具备自然顺序的特点,那么元素所属的类就必须要实现Comparable接口,把比较的规则定义在CompareTo方法上。
3.往TreeSet添加元素的时候,如果元素不具备自然顺序的特点,那么元素所属的类就也没有实现Comparable接口,那么在创建TreeSet对象的时候必须要传入比较器对象。
比较器的定义格式:
class类名implementsComparator{
}
双列集合
----------|Map存储的数据都是以键值对的形式存在的,键可以不重复,值可重复。
-------------|HashMap底层也是使用了哈希表实现的。
-------------|TreeMap底层也是使用了红黑树数据结构实现的。
练习:
*/
classPerson{
intid;
Stringname;
publicPerson(intid,Stringname){
super();
this.id=id;
this.name=name;
}
@Override
publicinthashCode(){
returnthis.id;
}
@Override
publicbooleanequals(Objectobj){
Personp=(Person)obj;
returnthis.id==p.id;
}
@Override
publicStringtoString(){
return"编号:
"+this.id+"姓名:
"+this.name;
}
}
publicclassDemo1{
publicstaticvoidmain(String[]args){
HashSetset=newHashSet();
set.add(newPerson(110,"狗娃"));
set.add(newPerson(110,"狗娃"));
System.out.println("集合的元素:
"+set);
}
}
输出
集合的元素:
[编号:
110姓名:
狗娃]
遍历输出
Demo2
packagecn.itcast.list;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.HashSet;
importjava.util.Iterator;
importjava.util.Map.Entry;
importjava.util.Set;
publicclassDemo2{
publicstaticvoidmain(String[]args){
ArrayListlist=newArrayList();
//使用get方法遍历。
list.add("张三");
list.add("李四");
list.add("王五");
System.out.println("======get方式遍历=========");
for(inti=0;iSystem.out.print(list.get(i)+",");
}
//使用迭代器注意:
迭代器在迭代的过程中不能使用集合对象修改集合中的元素个数。
如果需要修改要使用迭代器的方法进行修改,
System.out.println("\r\n======迭代器方式遍历=========");
HashSetset=newHashSet();
set.add("狗娃");
set.add("狗剩");
set.add("铁蛋");
/*Iteratorit=set.iterator();//获取到迭代器
while(it.hasNext()){
System.out.print(it.next()+",");
}
*/
for(Stringitem:
set){
System.out.print(item+",");
}
System.out.println("\r\n======entrySet方式遍历=========");
HashMapmap=newHashMap();
map.put("张三","001");
map.put("李四","002");
map.put("王五","003");
Set>entrys=map.entrySet();//
for(Entryentry:
entrys){
System.out.println("键:
"+entry.getKey()+"值:
"+entry.getValue());
}
}
}
======get方式遍历=========
张三,李四,王五,
======迭代器方式遍历=========
狗娃,铁蛋,狗剩,
======entrySet方式遍历=========
键:
李四值:
002
键:
张三值:
001
键:
王五值:
003
配置文件路径
packagecn.itcast.path;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileReader;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.Properties;
/*
如果经常会发生变化的数据我们可以定义在配置文件上。
比如说:
数据库的用户名与密码。
配置文件的路径应该如何写呢?
绝对路径:
一个文件的完整路径信息。
一般绝对路径是包含有盘符的。
绝对路径的缺陷:
因为绝对路径是有盘符开头的,有些系统是没有盘符的。
相对路径:
相对路径是相对于当前程序的路径。
当前路径就是执行java命令的时候,控制台所在的路径。
类文件路径:
类文件路径就是使用了classpath的路径找对应的资源文件。
如果需要使用到类文件路径首先先要获取到一个Class对象。
*/
publicclassDBUtil{
staticPropertiesproperties;
static{
try{
properties=newProperties();
//去加载配置文件/
Classclazz=DBUtil.class;
InputStreaminputStream=clazz.getResourceAsStream("/db.properties");//"/"代表了Classpath的路径。
getResourceAsStream该方法里面使用的路径就是使用了类文件路径。
properties.load(inputStream);
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args){
System.out.println("当前路径:
"+newFile(".").getAbsolutePath());
System.out.println("用户名:
"+properties.getProperty("userName")+"密码:
"+properties.getProperty("password"));
}
}
硬编码
packagecn.itcast.path;
/*
以后的数据库的用户名与密码一般都会保存到properties(配置文件)
*/
publicclassDemo1{
//硬编码
staticStringuserName="root";
staticStringpassword="123";
publicstaticvoidmain(String[]args){
System.out.println("用户名:
"+userName+"密码:
"+password);
}
}
输出
用户名:
root密码:
123