------- android培训、java培训、期待与您交流! ----------
数组和集合类的区别:
数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能
储对象。
集合类的特点:
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
Collection接口:
List接口:可存放重复元素,元素存取是有序的。
Set:不可以存放重复元素,元素存取是无序的。
add方法的参数类型是Object,以便于接受任意类型对象。
集合中存储的都是对象的引用(地址)。
什么是迭代器:
其实就是集合的取出元素的方式。
迭代器的内部实现:
把取出方式定义在集合的内部,这样取出方式就可以直接访问集合内部的元素。那么取出方式就被定义成了
内部类。而每一个容器的数据结构不同,所以取出的动作细节也不一样。但是都有共性内容判断和取出。那
么可以将共性抽取。
Collection:
List:元素是有序的,元素可以重复。因为该集合体系有索引。
ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。当元素
超过10个,则自动延长,50%延长。
LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。当元素超出10个,100%延长。
List集合:
1、添加:
add(index,element);
addAll(index,Collection);
2、删除:
remove(index);
3、修改:
set(index,element);
4、查询:
get(index);
subList(from,to);
listIterator();
int indexOf(obj):获取指定元素的位置。
ListIterator listIterator();
List集合特有的迭代器。ListIterator是Iterator的子接口。
在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。
所以,在迭代器时,只能用迭代器的方法操作元素,可是Iterator方法是有限的,只能对元素进行判断,取
出,删除的操作,如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。
该接口只能通过List集合的listIterator方法获取。
在迭代过程中,准备添加或者删除元素。
Iterator it = al.iterator(); while(it.hasNext()) { Object obj = it.next(); if(obj.equals("java02")) al.add("java008"); } 此时将抛出ConcurrentModificationException异常
枚举就是Vector的特殊取出方式。
public static void main(String[] args) { Vector v = new Vector(); v.add("java01"); v.add("java02"); v.add("java03"); v.add("java04"); Enumeration en = v.elements(); while(en.hasMoreElements()) { System.out.println(en.nextElement()); } }
LinkedList:
LinkedList的特有方法:
addFirst();
addLast();
getFirst();
getLast();获取元素,但不删除元素。如果集合中没有元素,则抛出异常。
removeFirst();
removeLast();获取元素,但是元素被删除,如果集合中没有元素,则抛出异常。
在JDK 1.6出现了替代方法:
offerFirst();
offerLast();
peekFirst();
peekLast();获取元素,但不删除元素。如果集合中没有元素,返回null。
pollFirst();
pollLast();获取元素,但是元素被删除,如果集合中没有元素,则返回null。
练习:使用LinkedList模拟一个堆栈或者队列数据结构。
class DuiLie { private LinkedList link; DuiLie() { link = new LinkedList(); } public void myAdd(Object obj)//添加元素进入队列 { link.addFirst(obj); } public Object myGet()//拿出元素,并移除这个元素 { return link.removeFirst(); } public boolean isNull()//判断队列中是否有元素 { return link.isEmpty(); } } class LinkedListTest { public static void main(String[] args) { DuiLie dl = new DuiLie();//初始化并添加元素 dl.myAdd("java01"); dl.myAdd("java02"); dl.myAdd("java03"); dl.myAdd("java04"); while(!dl.isNull())//如果队列不为空,则取出元素 { System.out.println(dl.myGet()); } } }
练习:去除ArrayList集合中的重复元素。
class ArrayListTest { public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) { ArrayList al = new ArrayList();//初始化一个ArrayList对象 al.add("java01");//并添加元素 al.add("java02"); al.add("java01"); al.add("java02"); al.add("java01"); sop(al);//打印原集合 al = singleElement(al); sop(al);//打印去掉重复元素的集合 } public static ArrayList singleElement(ArrayList al) { //定义一个临时容器。 ArrayList newAl = new ArrayList(); Iterator it = al.iterator();//遍历原集合 while(it.hasNext()) { Object obj = it.next(); if(!newAl.contains(obj))//如果新集合不包含这个元素则存入新集合 newAl.add(obj); } return newAl; } }
Set集合:
Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。
HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
HashSet保证元素的唯一性:
1、是通过元素的两个方法,hashCode和equals来完成。
2、如果元素的HashCode值相同,才会判断equals是否为true。
3、如果元素的hashcode值不同,不会调用equals。
对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
Set集合的功能和Collection是一致的。
练习:往hashSet集合中存入自定对象姓名和年龄相同为同一个人,重复元素。
class HashSetTest { public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) { HashSet hs = new HashSet();//定义一个HashSet //向这个集合中添加自定义元素 hs.add(new Person("a1",11)); hs.add(new Person("a2",12)); hs.add(new Person("a3",13)); //遍历这个集合 Iterator it = hs.iterator(); //打印集合中的内容 while(it.hasNext()) { Person p = (Person)it.next(); sop(p.getName()+"::"+p.getAge()); } } } class Person { private String name;//人的属性 private int age; Person(String name,int age) { this.name = name; this.age = age; } //覆盖hashCode值和equals方法 public int hashCode() { System.out.println(this.name+"....hashCode"); return name.hashCode()+age*37; } //如果姓名和年龄相同就为同一个人 public boolean equals(Object obj) { if(!(obj instanceof Person)) return false; Person p = (Person)obj; System.out.println(this.name+"...equals.."+p.name); return this.name.equals(p.name) && this.age == p.age; } public String getName() { return name; } public int getAge() { return age; } }
TreeSet集合:
可以对Set集合中的元素进行排序。底层数据结构是二叉树。
保证元素唯一性的依据:compareTo方法return 0.
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。
也种方式也成为元素的自然顺序,或者叫做默认顺序。
TreeSet的第二种排序方式:
当元素自身不具备比较性时,或者具备的比较性不是所需要的。这时就需要让集合自身具备比较性。在集合
初始化时,就有了比较方式。定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。
当两种排序都存在时,以比较器排序为主。
练习:按字符串长度排序
class TreeSetTest { public static void main(String[] args) { TreeSet ts = new TreeSet(new StrLenComparator());//创建一个TreeSet,并传入一个比较器 ts.add("abcd");//添加元素 ts.add("cc"); ts.add("cba"); ts.add("aaa"); ts.add("z"); ts.add("hahaha"); Iterator it = ts.iterator();//遍历打印这个集合,查看排序结果 while(it.hasNext()) { System.out.println(it.next()); } } } class StrLenComparator implements Comparator { public int compare(Object o1,Object o2)//覆盖compare方法 { String s1 = (String)o1; String s2 = (String)o2; int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));//字符串按长度从短到长排序 if(num==0) return s1.compareTo(s2); return num; } }
------- android培训、java培训、期待与您交流! ----------
相关推荐
day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda表达式 day08_File类、递归 day09_字节流、字符流 day10_缓冲流、转换流、...
19_集合_第2天(List、Set)_讲义
Spring实现集合(List_Map_Set)_自动装配,适合初学者熟悉集合类型的装配。
/sbin/set_irq_affinity eth1 可以进行中断绑定指定的cpu,提高网卡收包效率 把下面“eth1” 修改成对应的网卡名称 irq=$(cat /proc/interrupts | grep eth1 | cut -d':' -f 1); echo $irq for i in $irq ; do sudo...
9、 定义一个静态方法,该方法可以接收一个List,方法内对List进行排序 10、 声明类Student,包含3个成员变量:name、age、score,创建5个对象装入TreeSet,按照成绩排序输出结果(考虑成绩相同的问题)。
java的 private static void addSex() throws Exception{ DocumentBuilderFactory buiderFactory = DocumentBuilderFactory.new... NodeList list = document.getElementsByTagName("p1"); Node p1 = list.item(0);
JAVA__MAP_+__LIST__SET和MAP的区别+_Map的三种遍历方法
DataStruct_SetList.rar DataStruct_SetList.rar DataStruct_SetList.rar DataStruct_SetList.rar DataStruct_SetList.rar DataStruct_SetList.rar
Java相关 public static void main(String[] args) { User u1=new User(1, "zhangsan");... //放入到Set集合中 Set userset=new HashSet(); userset.add(u1); userset.add(u2); userset.add(u3);
void list_set(struct list *list, int index, int value); void list_add(struct list *list, int index, int value); int list_lookup(struct list *list, int value); int list_indexof(struct list *list, int ...
有换行,可以实现读取: 10_million_password_list_top_1000000.txt
Ansys_2022_R1 Fluent_Text_Command_List
Java集合排序及java集合类详解(Collection、List、Map、Set)
我们用的比较多的非泛型集合类主要有 ArrayList类 和 HashTable类。我们经常用HashTable 来存储将要写入到数据库或者返回的信息,在这之间要不断的进行类型的转化,增加了系统装箱和拆箱的负担,如果我们操纵的数据...
Java集合Collection、List、Set、Map使用详解
Java集合排序及java集合类详解 (Collection, List, Set, Map)
Collection – 对象之间没有指定的顺序,允许重复元素。... Map – 接口用于保存关键字(Key)和数值(Value)的集合,集合中的每个对象加入时都提供数值和关键字。Map 接口既不继承 Set 也不继承 Collection。
Tedu一阶段JavaSet集合和List集合。
截至至2020年1月27日,NXP官方提供的最新版本的S32K K1系列芯片的选型手册。通过,主频,温度范围,引脚数,封装类型,是否有CAN,是否有灵活配置IO,是否有安全加密,是否有DMA,以太网等条件快速筛选,确定芯片型号...
详细描述map、list、set的常用子类特性,各个场景的适用。