黑马程序员_集合框架

集合框架
数组和集合的区别:
数组的长度是固定的,集合的长度是可变的
数组可以存储基本数据类型,也可以存储对象,而集合只能存储对象,
集合里面存储的都是引用类型
学习集合框架需要掌握如何把对象存储进集合中,如何获取集合中的对象,掌握集合中每一个类的特点
集合框架图
collection接口
List接口(列表)
ArrayList类(数组)  LinkedList类(链表)  Vector类(数组)
Set接口(集)
HashSet类(哈希表)  
LinkedHashSet类(基于链表的哈希表)
TreeSet类(二叉树)
Map接口
HashMap类(映射哈希表)
LinkedHashMap(基于链表哈希表)
TreeMap类(红黑树)
Hashtable类(映射哈希表)
Properties类
Collection
方法:
  存储:add(E e)将元素存储到集合中
addAll(Collection c)将集合存储到另一个集合中
  移除:boolean remove(Object o)将集合中的元素删除,成功则返回true
boolean removeAll(Collection c)移除两个集合的交集,成功则返回true
  其他方法:
void clear()删除集合中的所有元素
in   size()返回集合中元素的个数
boolean  contains(Object o)判断集合中是否有这个元素
boolean  containsAll(Collection c)判断集合是否包含另一集合
boolean  retainAll(Collection c)获取两个集合的交集
迭代器
List list=new ArrayList();//创建集合
Iterator it=list.iterator();//获取迭代器
while(it.hasNext()){//判断集合中是否还有元素
it.next();//获取几个中的元素
}
一次迭代中,不能出现多次next方法,否则可能出现异常,出现数据错乱
List派系
特点:有序的(存、储顺序一致)   具有下标   允许存储重复元素
特有方法:
   add(int index,Object obj)在指定索引上插入元素
   Object  get(int index)获取指定下标上的元素
   Object  remove(int index)移除指定下标上的元素,并返回该元素
   Object  set(int index,Object obj)修改指定下标上的元素,并返回修改前的元素
   List    subList(int start,int end)获取集合中的一部分,包含头,不包含尾
ArrayList
特点:底层实现数组结构
     线程不安全 运行效率高
     底层是可变数组   查询快  增删慢
     数组大小默认为10个位置  每次增长50%
存储自定义对象并取出
class Person{
String name;
Person(String name){
this.name=name;
}
public String toStrng(){
return name;
}
}
class ArrayListTest{
public static void main(String[] args){
List list=new ArrayList();//创建集合
list.add(new Person("rr"));//存储对象
list.add(new Person("ww"));
list.add(new Person("ss"));
Iterator it =list.iterator();//创建迭代器
while(it.hasNext()){//判断是否有元素可以被取出
System.out.println(it.next());//取出元素
}
}




}
Vector类
集合框架在JDK1.2版本后出现,Vector类在JDK1.0版本出现
运行效率慢,线程安全,每次扩容100%,被ArrayList取代
LinkedList类
底层结构链表实现,记录对象的地址
查询慢 增删快,线程不安全,效率高
特有方法:
   addFirst(Object obj)在集合的开头添加元素
   addLast(Object obj)在集合的结尾添加元素
   getFirst(Object obj)获取集合的开头
   getLast(Object obj)获取集合的结尾
   removeFirst() 删除集合的开头,并返回该元素
   removeLast()删除集合的结尾,并返回该元素
import java.util.*;
class Person{
String name;
Person(String name){
this.name=name;
}
public String toString(){
return name;
}
}
class LinkedListTest{
public static void main(String[] args){
LinkedList list=new LinkedList();
list.addFirst(new Person("rr"));//在集合开头添加元素
list.addLast(new Person("ww"));//在集合结尾添加元素
list.addFirst(new Person("ss"));
System.out.println(list.getFirst());//获取集合开头的元素并打印
System.out.println(list.removeLast());//删除集合结尾元素
System.out.println(list);//打印集合
}




}
Set派系
特点:不允许存储重复元素
没有下标
无序
Set接口中的方法和Collection接口中的方法一致
HashSet
特点:底层数据结构哈希表
HashSet本身没有功能,功能来自HashMap
HashSet调用的是HashMap的功能
无序
允许存储null
线程不安全,执行效率高
因为HashSet不允许存储重复元素,因而在存储自定义元素是,需要重写hashCode()和
equals()方法,HashSet集合调用hashCode()方法判断两个对象是否为同一元素
若哈希值相同,则调用equals()方法进一步判断
import java.util.*;
class Person1{
String name;
int age;
Person1(String name,int age){
this.name=name;
this.age=age;
}
public String toString(){
return name+"..."+age;
}
public int hashCode(){//重写hashCode方法
return this.name.hashCode()+this.age*3;
}
public boolean equals(Object obj){//重写equals方法
if (obj==null) {
return false;
}
if (this==obj) {
return true;
}
if (obj instanceof Person1) {
Person1 p=(Person1)obj;
return this.name.equals(p.name)&&this.age==p.age;
}
return false;
}
}
class HashSetTest{
public static void main(String[] args){
Set set=new HashSet();
set.add(new Person1("aa",23));
set.add(new Person1("aa",23));
set.add(new Person1("bb",25));
set.add(new Person1("cc",29));
Iterator it =set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}


}


LinkedHashSet
特点:有序,基于哈希表的链表实现,线程不安全,执行效率高
TreeSet
特点:底层数据结构二叉树
线程不安全,执行效率高
会对存储到集合的元素进行排序
注意:TreeSet是通过对元素的排序来保持存入集合的元素的唯一性的
存入TreeSet集合的元素本身需要有自然顺序,若没有则需要实现
Comparable接口,重写compareTo()方法,或者自定义比较器,实现
Compartor接口,重写compare()方法
比较器优先于自然顺序
import java.util.*;
class Person1 implements Comparable{
String name;
int age;
Person1(String name,int age){
this.name=name;
this.age=age;
}
public String toString(){
return name+"..."+age;
}
public int compareTo(Object obj){//重写了compareTo方法
Person1 p=(Person1)obj;
int num=this.name.compareTo(p.name);
return num==0?this.age-p.age:num;
}
}
class TreeSetTest1{
public static void main(String[] args){
Set set=new TreeSet(new MyComparator());
set.add(new Person1("ww",34));
set.add(new Person1("ee",24));
set.add(new Person1("ss",45));
set.add(new Person1("ww",34));
method(set);
}
public static void method(Set set){
Iterator it =set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
class MyComparator implements Comparator{
public int compare(Object obj1,Object obj2){
Person1 p1=(Person1)obj1;
Person1 p2=(Person1)obj2;
int num=p1.age-p2.age;
return num==0?p1.name.compareTo(p2.name):num;
}


}
泛型
JDK1.5版本出现的一种安全机制
格式:
  集合类<数据类型> 变量 = new 集合类<数据类型>();
  数据类型,指定了这个集合,只能存储这个类型的对象


泛型的出现,将安全问题,由运行时期,提前到了编译时期
ArrayList<E>  boolean add(E e)  E:看成是一个变量
ArrayList<String>  所有的E都变成了String


好处,减少了代码,使用泛型避免类型的强制转换
泛型什么时候该写泛型:当你用一个类的时候,发现类的右边<>使用泛型了
注意:存储基本数据类型,泛型必须写8个对象包装类


import java.util.*;
public class MyGenericDemo {
public static void main(String[] args) {
Set<Person> set=new TreeSet<Person>(new MyCompartor());
set.add(new Person("小明",23));
set.add(new Person("小明",23));
set.add(new Person("王柳",23));
set.add(new Person("王柳",23));
set.add(new Person("小桥",28));
set.add(new Person("小明",26));
set.add(new Person("大桥",24));
Iterator<Person> it =set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}


}
import java.util.Comparator;


public class MyCompartor implements Comparator<Person> {
public int compare(Person o1,Person o2){
int num=o1.getAge()-o2.getAge();
return num==0?o1.getName().compareTo(o2.getName()):num;
}
}
public class Person {
private String name;
private int age;
Person(){}
Person(String name,int age){
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;
}
public int hashCode(){
return this.name.hashCode()+this.age*13;
}
public boolean equals(Object obj){
if (obj==null) {
return false;
}
if (this==obj) {
return  true;
}
if (obj instanceof Person) {
Person p=(Person)obj;
return this.name.equals(p.name)&&this.age==p.age;
}
return false;
}
public String toString(){
return "Person"+this.name+"....."+this.age;
}

}
Map集合
映射,键映射到值得集合,Map体系的集合,存储对象的时候,一次存储两个,
一个称作键,一个称作值,双列集合
特点:
一个键最多只能映射一个值
不允许出现重复键
方法:v put(k,v)将指定的键和值存入Map集合中,存储了重复的键,返回被覆盖前的值
v get(k)获取指定键的值,没有这个键,则返回null
v remove(k)删除指定的键,对应的值,返回被删除前的值,没有被删除成功
则返回null
boolean containsKey(k)判断集合是否包含指定的键,有则返回true
boolean containsValue(v)判断集合中是否包含指定的值,有则返回true
Collection value()将集合中所有的值保存到Collection集合中
set<k> keySet()将几个中所有的键保存到set集合
set<Map.Entry<k,v>> entrySet()将集合中的键值对关系存储到Set集合
获取Map中键值对的方式
第一种:
利用Map集合的keySet()方法,将键存储到Set集合中,再根据键获取值
Map<String,String> map=new HashMap<String,String>();
Set<String> set=map.keySet();
Iterator<String> it=set.iterator();
while(it.hasNext()){
String s=it.next();
System.out.println(s+"..."+map.get(s););
}
第二种:利用Map集合的entrySet()方法,将键值对关系对象存储到Set集合
Map<Map.Entry<String,String>> map=new HashMap<String,String>();
Set<Map.Entry<String,String>> set=map.entrySet();
Iterator<Map.Entry<String,String>> it =set.iterator();
while(it.hasNext()){
Map.Entry<String,String> m=it.next();
String s1=m.getKey();
String s1=m.getValue();
System.out.println(s1+"..."+s2);
}
HashMap
底层也是哈希表,允许存储null值,null键
不同步,线程不安全,执行效率高
保证:存储到HashMap集合中的键,唯一性
自定义对象,保证唯一性,重写hashCode()和equals()方法
import java.util.*;
public class HashMapTest {
public static void main(String[] args) {
Map<Person,Integer> map=new HashMap<Person, Integer>();
map.put(new Person("张三",23), 001);
map.put(new Person("张三",23), 001);
map.put(new Person("李四",23), 002);
map.put(new Person("王五",23), 003);
method(map);

}
public static void method(Map<Person,Integer> map){
Set<Person> set=map.keySet();
Iterator<Person> it=set.iterator();
while(it.hasNext()){
Person p=it.next();
Integer s=map.get(p);
System.out.println(p+"..."+s);
}
}
}
class Person{
private String name;
private int age;
Person(String name,int age){
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;
}
public String toString(){
return this.name+"..."+this.age;
}
//重写hashCode
public int hashCode(){
return this.name.hashCode()+this.age*this.age;
}
//重写equals方法
public boolean equals(Object obj){
if (this==obj) {
return true;
}
if (obj==null) {
return false;
}
if (obj instanceof Person) {
Person p=(Person)obj;
return this.name.equals(p.name)&&this.age==p.age;
}
return false;
}
}
LinkedHashMap
是HashMap的子类,特点是保证键的顺序,存储的键,怎么存的怎么取出来,不同步,线程不安全,执行效率高
底层结构基于哈希表的链表实现
TreeMap
底层结构红黑树,自然平衡二叉树
线程不同步,不安全,效率高
存储键,对键的自然顺序的排序,要求作为键的对象,必须具备自然顺序或者自定义比较器
存储时Set使用add,Map使用put


import java.util.*;
public class TreeMapTest {
public static void main(String[] args) {
Map<Person2,String> map=new TreeMap<Person2, String>();
map.put(new Person2("小明",17), "高中");
map.put(new Person2("大黄",10), "二年级");
map.put(new Person2("小明",17), "高中");
map.put(new Person2("王五",23), "大学");
map.put(new Person2("王五",23), "大学");
map.put(new Person2("赵六",17), "高中");
map.put(new Person2("小名",23), "高中");
Set<Person2> set=map.keySet();
Iterator<Person2> it=set.iterator();
while(it.hasNext()){
Person2 p=it.next();
String s=map.get(p);
System.out.println(p+"..."+s);
}
}
}
class Person2 implements Comparable<Person2>{
private String name;
private int age;
Person2(String name,int age){
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;
}
public String toString(){
return this.name+"..."+this.age;
}
public int compareTo(Person2 p){
int num=this.name.compareTo(p.getName());
return num==0?this.age-p.getAge():num;
}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
基层社会治理解决方案摘要 基层社会治理是国家治理体系和治理能力现代化的重要组成部分。本文总结了当前基层社会治理的政策背景、建设背景、现状、整体规划及具体解决方案,旨在提升社会治安综合治理能力,实现社会和谐稳定。 一、政策背景与建设背景 近年来,国家高度重视基层社会治理,出台了一系列政策文件,如《关于加强社会治安防控体系建设的意见》、《社会治安综合治理基础数据规范》等,为基层社会治理提供了政策指导和标准规范。在此背景下,各地纷纷推进综治中心建设,形成市、区、街道、社区四级综治中心体系,实现统一指挥、调度、派遣、监督等功能。市级综治中心作为龙头,负责整体规划和资源调度;区县综治中心作为主体,负责矛盾纠纷化解、群防群治等工作;街道综治中心作为支撑,负责具体事务的受理、办理和监管;社区综治中心则作为基础,负责信息采集、矛盾排查等日常工作。 二、当前现状与问题分析 当前,基层社会治理虽取得一定成效,但仍存在一些问题。一方面,各综治中心建设水平参差不齐,信息孤岛现象严重,无法实现数据共享和业务协同;另一方面,基层社会治理手段相对单一,主要依赖人力巡查和事后处理,缺乏智能化、信息化手段支持。此外,基层社会治理还存在公众参与不足、群防群治机制不健全等问题,影响了社会治理效能的发挥。 三、整体规划与目标设定 针对上述问题,本文提出了基层社会治理的整体规划与目标设定。首先,明确建设思路,即坚持党政领导、整合社会资源、实现互联互通和资源共享;其次,设定建设目标,包括构建综治大脑、实现智能应用、打造基础平台等;最后,制定业务概图,明确各级综治中心的职责和任务,以及物联感知平台、智慧治理等创新应用的建设方向。 四、具体解决方案与实施路径 为实现上述目标,本文提出了具体解决方案与实施路径。一是建设基层治理信息平台,采用微服务模式建设社会信息采集平台、社会综合治理基础平台等核心业务层;二是构建大数据应用中心,整合各类数据资源,实现数据清洗、分类占比、任务调度监控等功能;三是推进信息采集平台建设,实现一键操作、极简极易的信息采集方式;四是完善社会综合治理信息平台功能,包括实有人口、实有房屋、矛盾排查处理等模块;五是建立大联动业务协同系统,实现跨部门、跨领域的业务协同和应急指挥。 五、总结与展望 综上所述,基层社会治理解决方案以提升社会治安综合治理能力为核心,通过政策引导、技术支撑、机制创新等手段,推动基层社会治理向智能化、信息化、协同化方向发展。未来,随着技术的不断进步和政策的持续完善,基层社会治理将更加高效、精准、便捷,为人民群众提供更加安全、和谐、幸福的生活环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值