第一篇:两种Java容器类List和Set分析
两种Java容器类List和Set分析
【简 介】
容器类可以大大提高编程效率和编程能力,在Java2中,所有的容器都由SUN公司的Joshua Bloch进行了重新设计,丰富了容器类库的功能。
容器类可以大大提高编程效率和编程能力,在Java2中,所有的容器都由SUN公司的Joshua Bloch进行了重新设计,丰富了容器类库的功能。
Java2容器类类库的用途是“保存对象”,它分为两类:
Collection----一组独立的元素,通常这些元素都服从某种规则。List必须保持元素特定的顺序,而Set不能有重复元素。
Map----一组成对的“键值对”对象,即其元素是成对的对象,最典型的应用就是数据字典,并且还有其它广泛的应用。另外,Map可以返回其所有键组成的Set和其所有值组成的Collection,或其键值对组成的Set,并且还可以像数组一样扩展多维Map,只要让Map中键值对的每个“值”是一个Map即可。
1.迭代器
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
Java中的Iterator功能比较简单,并且只能单向移动:
(1)使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。
(2)使用next()获得序列中的下一个元素。
(3)使用hasNext()检查序列中是否还有元素。
(4)使用remove()将迭代器新返回的元素删除。
Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。
2.List的功能方法
List(interface): 次序是List最重要的特点;它确保维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(只推荐LinkedList使用)。一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和删除元素。
ArrayList: 由数组实现的List。它允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和删除元素,因为这
比LinkedList开销要大很多。
LinkedList: 对顺序访问进行了优化,向List中间插入与删除得开销不大,随机访问则相对较慢(可用ArrayList代替)。它具有方法addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast(),这些方法(没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。
3.Set的功能方法
Set(interface): 存入Set的每个元素必须是唯一的,因为Set不保存重复元素。加入Set的Object必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。
HashSet: 为快速查找而设计的Set。存入HashSet的对象必须定义hashCode()。
TreeSet: 保持次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。
LinkedHashSet: 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。
HashSet采用散列函数对元素进行排序,这是专门为快速查询而设计的;TreeSet采用红黑树的数据结构进行排序元素;LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的次序,使得看起来元素是以插入的顺序保存的。需要注意的是,生成自己的类时,Set需要维护元素的存储顺序,因此要实现Comparable接口并定义compareTo()方法。
第二篇:Java容器类学习心得
Java容器类学习心得
Java容器类学习心得
由于我对C++比较熟悉,所以学习Java应该重点体会Java带来的新概念。本文基本上是Java标准库中集合框架的基本概念,没有例子。写本文的目的在于方便我很长时间后若是忘了这些东西可以通过这片文章迅速回忆起来。
1.接口
整个Java容器类的基础是容器接口(例如Collection,Map等接口),而不是类。使用接口的最大好处在于将容器的实现与容器的接口分开,这就意味着你可以使用相同的方法访问容器而不用关心容器是由什么样的数据结构实现的。同样,Iterator接口也使得用户可以使用相同的方法访问不同的容器类。以上这些是通用算法的基础。
1.1 Collection接口
Collection接口有如下基本方法:
boolean add(Object obj):如果添加对象后,集合确实发生了变化,则返回true;否则返回false
Iterator iterator():返回一个实现了Iterator接口的对象
此外,还有
int size(),boolean isEmpty(),boolean contains(Object obj),void clear()等许多有用的方法
1.2 Map接口
Map用于存放关键字/值对。有如下基本方法:
Object get(Object key)
Object put(Object key,Object balue)
Set keySet()
Set entrySet()
此外,还有其他有用的方法。
需要注意的是,从表面看它似乎就是一种由键值对构成的集合,但实际上并不是这样。不过另一方面假如将Map的某一部分看作集合,有时候也还是显得非常方便的。换言之你可以创建一个集合用它来表达Map的那一部分。综上所述,一个Map可以返回的东西包括它的键值构成的一个Set、由它的值构成的一个集合或者由它的键值对构成的一个Set。
1.3 Iterator接口
Iterator接口有下面3个基本方法:
Object next():返回迭代器刚越过的元素的引用
boolean hasNext():判断容器内是否还有可供访问的元素
void remove():删除迭代器刚越过的元素
注意:Java中的迭代器与STL中的迭代器在概念上有很重要的区别。在STL中,迭代器类似于数组的索引,使用这种迭代器可以查看存放在该位置上的元素(类似于通过数组索引i来访问c[i]一样)。Java中的迭代器并不这样运行。查看与位置的变化紧密的结合在一起。每次通过next()访问一个元素的同时,迭代器的位置会自动向前走一步。
这个问题可以这样理解:Java中的迭代器指向的位置并不是元素,而是元素之间。这样,每次调用next()时,迭代器便越过下一个元素,同时返回它刚越过的那个元素的引用。
根据上面的说明,很容易得出下面的代码是错误的:
it.remove();
it.remove();
而下面的代码是正确的:
it.remove();
it.next();
it.remove();
迭代器的典型应用
Iterator it=c.iterator();
while(it.hasNext())
{
Object obj=it.next();
//do something with obj
}
1.4 子接口
1.4.1 List接口
List从Collection接口中分立出来是因为List的特点——有序的集合。这里指的有序并不是按照大小排好序的(Sorted),而是指集合是可以以确定的顺序访问的序列。针对List的这个特点,它比Collection接口增加了通过索引进行操作的方法。例如,add、remove、get、set等方法的参数表中都可以加入索引的数值,从而操作处在索引位置处的元素。
1.4.2 Set接口
Set与List的不同,它里面的元素是无序的;所以,不能通过任何索引的方法来操作Set对象
1.4.3 ListIterator接口
使用与List的迭代器,比Iterator接口增加了一些方法(例如add()等)。此外,由于List是双向表,所以还增加了Object previous()和boolean hasPrevious()方法,用法与next()和hasNext()一样。
1.4.4 SortedMap接口
包含如下基本方法:
Comparator comparator()
Object firstKey()
Object lastKey()
2.抽象容器类
2.1 抽象容器类包括AbstractCollection,AbstractList,AbstractSet等等
2.2 为什么要有抽象结合类?
例如Collection接口中定义了许多有用的方法,如果实现Collection接口的每个类都
自行实现这么多的方法,那将是非常麻烦的。为了使实现Collection接口的类的实现更容易,AbstractCollection类让一些基本方法(比如add()和iterator())变成了抽象的方法,而利用这些基本方法的其他方法(例如addAll()等等)则具体实现了。
3.具体的容器
3.1 ArrayList与LinkedList
都是实现了List接口的类,是有序集。List接口支持通过索引的方法来访问元素,对于这一点,ArrayList没有任何问题;但是对于LinkedList则有很大的问题,链表本身不应该支持随机存储,但是作为List的一个实现,链表也提供了对随机访问的支持,但是效率很低。每次通过索引的方法都是进行一次遍历。我认为,其实就不应该让链表支持随机访问;而Java这样实现我想是因为整个集合框架的体系,使得链表与数组可以使用同样的方法使用。综上所述,对于LinkedList最好不使用随机访问,而使用迭代器。
3.2 TreeSet
3.2.1 TreeSet是SortedSet的一个实现。根据数据结构的知识可以知道,树的效率非常高,而且Java标准库中有TreeSet这样的类,以后应该尽量使用TreeSet来提高程序的效率。
3.2.2 需要注意的是:TreeSet作为有序集,它通过compareTo或者Comparator来将集合元素排序。任何具有相同比较值的元素(无论它们是否equals()),在TreeSet中都作为同一个元素,从而不能有重复。这样以来,即使是不同的对象也不能加入到集合中,这一点有时候很不方便。我在编写A*算法时,不同状态有时候对应着同一个启发函数值,那么这些不同的状态就无法加入到TreeSet中。
3.3 HashSet
3.3.1 HashSet是非常高效的数据结构,与TreeSet不同,HashSet是比较对象的equals()方法来区分不同的对象。这样只有真正不同的对象才能不被重复的加入到集合中。
3.3.2 需要注意的是:HashSet效率非常高,但是对象的hashCode函数不好确定。一般默认的对象的hashCode函数是根据对象的内存地址得到的。好的hashCode函数是HashSet成功运用的关键。
4.视图
4.1 什么是视图?
对映象类使用keySet()方法,仿佛该方法建立了一个新的集合,并将影响的所有关键字都填入这个集合。实际情况并非如此,对这个集合的任何操作都将反映到原始的映象对象上。
实际上,keySet()返回的是一个实现Set接口的对象,对该对象的操作就是对映象的操作。这样的集合成为视图。
4.2 视图的应用
4.2.1 将现有的容器变为线程安全的容器:使用Collections.synchronizedCollection(Collection c)方法,在SDK文档中该方法的解释是“Returns a synchronized(thread-safe)collection backed by the specified collection”。
4.2.2 将现有的容器变为只读的容器:使用Collections.unmodifiableCollection(Collection c)方法,在SDK文档中该方法的解释是“Returns an unmodifiable view of the specified collection.”。
4.2.3 子范围
4.2.4 Arrays类中的asList()方法
5.通用算法
通用的集合接口带来的一大好处就是可以编写通用算法。可以使用Collections中的静态通用方法,也可以编写自己的通用方法。
(具体的算法的内容在此略去)
总结:千万记住这句话——没有最好的容器(数据结构),要根据不同的问题选择不同的容器,以此来达到功能的要求和效率的最优。
第三篇:培训类会议Check list
CHECK LIST:
会邀准备
活动策划案(主题、预算、受邀企业方向、规模); 会议场地现场考察及预订;
致辞领导邀请及时间确认(如有); 演讲人邀请及时间、发言顺序确认; 会议议程及邀请函内容确认; 会议主持人安排及串词确认; 着装及抵会场交通方式确认;
会议前晚群发短信至参会人(时间、交通、天气提醒)。
资料准备
开场投影PPT及嘉宾演讲PPT备份; 护航企业宣传片; 会议演讲嘉宾桌牌; 回执参会名单打印; 会场签到表打印;
参会资料袋(NOVOTS记录纸、笔、宣传手册、调查问卷); 护航介绍易拉宝。
后勤准备
会场门口引导牌及会场横幅(若有); 现场照相/摄像的器材及人员; 饮用水及茶歇食品;
嘉宾专家费(现金+信封)及签领确认单; 抽奖及礼品(如有)。
会场准备
电脑电路链接测试; 麦克风及音响测试; 投影仪测试。
会后准备
签到表及调查问卷整理及分类; 分类话术并做电话需求回访;
参会企业通讯录整理(企业名称+IT联系人电话及邮箱); 对参会企业的会后感谢邮件发送(market邮箱发送); 会议报道文章(网站及微信)及照片整理; 拜访并情况反馈至会议主办单位。
第四篇:标准C++中string类及STL容器类简介
标准C++中string类及STL容器类简介
一.标准C++库字符串类std::string的用法
#include
std::string s1;
std::string s3(s2);
std::string s2(“this is a string”);
begin 得到指向字符串开头的Iterator
end 得到指向字符串结尾的Iterator
rbegin 得到指向反向字符串开头的Iterator
rend 得到指向反向字符串结尾的Iterator
size 得到字符串的大小
length()和size函数功能相同
max_size 字符串可能的最大大小
capacity 在不重新分配内存的情况下,字符串可能的大小 empty 判断是否为空
operator[] 取第几个元素,相当于数组
c_str 取得C风格的const char* 字符串
data 取得字符串内容地址
operator= 赋值操作符
reserve 预留空间
swap 交换函数
insert 插入字符
append 追加字符
push_back 追加字符
erase 删除字符串
clear 清空字符容器中所有内容
resize 重新分配空间
assign 和赋值操作符一样
replace 替代
copy 字符串到空间
find 查找,返回基于0的索引号
rfind 反向查找
find_first_of 查找包含子串中的任何字符,返回第一个位置
find_first_not_of 查找不包含子串中的任何字符,返回第一个位置 find_last_of 查找包含子串中的任何字符,返回最后一个位置
find_last_not_of 查找不包含子串中的任何字符,返回最后一个位置 substr(n1,len)得到字符串从n1开始的长度为len的子串
比较字符串(支持所有的关系运算符)
compare 比较字符串
operator+ 字符串链接
operator+= += 操作符
operator== 判断是否相等
operator!= 判断是否不等于
operator
从输入流中读入字符串
operator
getline 从输入流中读入一行
二.向量类模板std::vector成员函数:
#include
std::vector name;
std::vector name(size);
std::vector name(size,value);
std::vector name(myvector);
std::vector name(first,last);
assign(first,last)用迭代器first,last所指定的元素取代向量元素 assign(num,val)用val的num份副本取代向量元素
at(n)等价于[]运算符,返回向量中位置n的元素
front()返回向量中第一个元素的引用
back()返回向量中最后一个元素的引用
begin()返回向量中第一个元素的迭代器
end()返回向量中最后一个元素的迭代器
max_size()返回向量的最大容量(向量所能容纳的最多元素个数)capacity()返回向量当前所能容纳的最多元素个数
clear()删除向量中所有元素
empty()如果向量为空,返回真
erase(start,end)删除迭代器start end所指定范围内的元素
erase(i)删除迭代器i所指向的元素
insert(i,x)把x插入到迭代器i所指定的位置
insert(i,n,x)把x的n份副本插入到迭代器i所指定的位置
insert(i,start,end)把迭代器start和end所指定的范围内的值插入到迭代器i所指定的位置
push_back(x)把x插入到向量的尾部
pop_back()删除向量中最后一个元素
rbegin()返回一个反向迭代器,该迭代器指向的元素越过了向量中的最后一个元素
rend()返回一个反向迭代器,该迭代器指向向量中第一个元素
reverse()反转元素顺序
resize(n,x)把向量的大小改为n,新元素的初值赋为x
size()返回向量的大小
swap(vectorref)交换2个向量的内容
三.双端队列类模板std::deque成员函数:
#include
std::deque name;
std::deque name(size);
std::deque name(size,value);
std::deque name(mydeque);
std::deque name(first,last);
其成员函数大部分和std::vector相同
PS:
push_front(x)把x放到双向队列的头部
pop_front()把双向队列的第一个元素删除
四.链表类模板std::list成员函数:
#include
std::list name;
std::list name(size);
std::list name(size,value);
std::list name(mylist);
std::list name(first,last);
其成员函数大部分和std::vector相同
PS:
push_front(x)把x放到链表头部
pop_front()把链表第一个元素删除
merge(listref)把listref所引用的链表中的所有元素插入到链表中 remove(val)从链表中删除所有值为val的元素
remove_if(pred)删除链表中谓词pred为真的元素
(谓词即为元素存储和检索的描述,如std::less,std::greater那么就按降序/升序排列,你也可以定义自己的谓词)
sort()根据默认的谓词对链表排序
sort(pred)根据给定的谓词对链表排序
unique()删除所有重复的元素,使链表中没有重复元素(在这之前要对链表中的原始进行排序)
unique(pred)根据谓词pred删除所有重复的元素,使链表中没有重复元素 注意:vector和deque支持随机访问,而list不支持随机访问,因此不支持[]访问!
五.容器适配器堆栈类std::stack成员函数:
#include
stack实现先进后出的操作
std::stack name;
type为堆栈操作的数据类型
container为实现堆栈所用的容器类型,可以为
std::vector,std::deque,std::list
例如
std::stack IntStack;
管理成员函数只有:empty(),size(),top(),push(),pop()
六.容器适配器队列类std::queue成员函数:
#include
queue实现先进先出的操作
std::queue name;
type为队列操作的数据类型
container为实现队列所用的容器类型,可以为
std::vector,std::deque,std::list
管理成员函数只有:empty(),size(),front(),back(),push(),pop()
七.关联式容器:
集合类std::set,多重集合类std::multiset,映射类std::map,多重映射类std::multimap,位集合std::bitset
八.通用算法(对以上STL均适用)
#include
1.非修正序列算法:
2.修正序列算法:
3.排序算法:
4.数值算法:
九.迭代器(类似指针的功能,对容器的内容进行访问)
#include
例如:
std::vector IntVector;
std::vector::iterator first=IntVector.begin();
//begin()得到指向vector开头的Iterator,*first得到开头一个元素的值 std::vector::iterator last=IntVector.end();
//end()得到指向vector结尾的Iterator,*last得到最后一个元素的值
第五篇:军队院校两种人力资源制度比较分析
军队院校两种人力资源制度比较分析
摘要:军队院校作为军事力量构成的重要部分,为军队发展建设提供坚强的人才保障。由于体制编制调整,军队院校自身的人力资源建设出现了一些新情况,主要形成了以现役军官制度和文职人员制度并行的运行状态。本文通过对军队院校这两种人力资源制度的梳理,分析军队院校人力资源建设中存在的问题,以问题探讨的形式勾勒出军队院校人力资源管理应有的发展走势。
关键词:军队院校
现役军官
文职人员
人力资源制度
人力资源是指能够推动国民经济和社会发展的,具有智力劳动和体力劳动能力的人的总和,是一切资源中最为宝贵的资源。人力资源也是国家、军队建设中最为核心的要素,而军队院校目前作为军队各种人力资源的培养和提供者,其自身的人力资源建设和管理就显得尤为重要。近年来,随着国家军事斗争准备大背景和军队编制体制的不断调整,现役军人编制逐渐缩减,军队院校的人力资源构成目前呈现出多样化的特点,文职人员制度就是近年在军队院校开始推行的一种新的用人方式。随着这一新的人力资源制度的推行展开,为军队院校建设带来了新气象,但是也带来一些新的问题。
军队院校人力资源目前主要包括现役军人、文职人员、职工、聘用人员等,由这些不同类型的人员构成了军队院校人力资源的运行状态。这些人员在各自不同的岗位上履行职务,享受相应待遇。本文主要对军队院校现役军官制度和文职人员制度两种制度进行分析研究。
一、军队院校现役军官人力资源制度优势
一是现役军官职务晋升渠道畅通。军队院校现役军官目前主要分为行政军官和专业技术军官两种类型,中下级军官和中级专业技术职称以下职务晋升基本没有阻碍,而且到达一定职务和年龄之后,可以实现人员的“转岗”,在行政职务和专业技术职务之间进行调换,在担任一定领导职务之后,甚至可以同时兼任两种职务类型,这就实现了军队院校现役军官在职务上的有序合理晋升。
二是现役军官福利待遇保障从优。军队院校一般都处于大城市,又不担负作战任务,但是按照现行的军队人力资源管理规定,一切薪酬福利待遇都是依照现役军官本身的职务和技术等级确定;再者,军队院校大都为现役军官提供完善的住房等保障体系,依照目前的军队薪酬标准,现役军官的薪酬足以维持日常的体面生活。一旦进入现役军官体系,特别是在军队院校,基本上可以终身享受各项福利待遇。
三是现役军官享有崇高的社会地位。军队院校是为部队培养各类型军事人才的重要机构。军队院校现役军官特别是具有专业技术高级职称的军官一般都有军队师职以上的军衔职务,这一职务在作战部队已经达到个人职务晋升的“天花板”,他们同时也具有教授技术资格,这样的双重身份使军队院校现役军官在军地都有很高的社会地位,受到普遍的尊敬和推崇。
二、军队院校文职人员人力资源制度的特点
文职人员人力资源制度作为军队人力资源管理的重大变革,实行文职人员制度,外军已有百余年历史。由于文职人员不受服役年限、军衔晋升等限制,可以灵活便捷地使用社会人才。实行这一制度,既可以把一些现役军人从机关或业务部门中替换出来,充实到作战部队,又可以有效吸引保留优秀人才,因此世界各国军队都把广泛吸纳文职人员作为推进现代化进程的一项重要军事制度。随着我军遂行多样化军事任务越来越多,对人才的需求度越来越高,也为了使地方人力资源更好地服务部队建设,我军开始对编制体制进行重大调整,不断适应地方社会经济和部队发展需求,经国务院、中央军委批准,从2005年正式颁布实施《中国人民解放军文职人员条例》(以下简称“条例”),标志着我军开始实行真正意义上的文职人员制度。
《条例》规定,文职人员是指按照规定的编制聘用到军队工作,履行现役军官(文职干部)同类岗位相应职责的非现役人员。对这一规定进行深层次解析,主要包含了以下几层意思,第一,文职人员聘用到军队编制岗位工作,是军队力量构成的重要组成部分;第二,文职人员履行现役军官(文职干部)相同岗位职责;第三,文职人员没有军籍,是军队使用的社会人才;第四,文职人员实行聘用制管理,通过签订合同明确聘用双方的权利义务、约束相互之间的行为。
三、合理利用军队院校两种人力资源制度
军队院校在编制体制调整的形势下,人员结构呈现两大趋势:即以现役军官为主体的人才数量逐步减少,中坚骨干人才有断层现象出现,而以文职人员为主体的人才队伍逐步扩大,并呈现多元化发展趋势。这种人才队伍结构和市场需求的不平衡,对军队院校的生存和发展提出了挑战,也为军队院校科学化的人力资源管理创造了机遇。
面对不同编制体制的人员,人力资源管理在军队院校中越来越摆在突出的位置上,各级管理者的目标相同,都是使各类人力资源在军队院校中发挥最大的潜能,各尽所能为军队院校带来贡献,但是由于各自所处的地位不同,他们发挥的作用也不一样。军队院校人力资源管理,要以增强战斗力为根本目标,通过规划计划、组织、协调、控制与激励等管理活动,充分挖掘人的潜能,激发人的创造力,优化系统结构,提高整体效能的活动。加强军队院校人力资源管理,必须积极引进现代人力资源管理的方式方法,完善军队院校人力资源政策制度。
纵观世界军队院校人力资源制度,军队院校显现的多元化人员结构特征,要求管理者必须审时度势,创新管理理念,探索两种人力资源制度并行的管理模式,促进传统的人事管理向人力资源管理转变,建立科学有效的人力资源管理机制。从人事管理转向人力资源管理不是简单的称谓改变,而是管理理念和管理模式的创新,即从“以事为中心”的监督、控制管理向“以人为中心”的激励、开发管理转变。
一是要有各种人力资源“为我所用”的战略眼光。加大对人力资源管理的统揽力度,依据我军军事变革大背景和军队院校发展的战略目标,结合军队院校内人力资源结构现状制定人才战略规划并努力付诸实施。尤其要关注人力组成多元化的发展趋势,预测人力资源需求,制定人力资源行动方案,在稳定现役军官队伍的同时,在提高聘用文职人员质量上下功夫。要力求在最恰当的时候、最恰当的地方,选聘最合适的人才,安排最合适的岗位,产生最理想的效益。
二是坚持人力资源管理以人为本的理念。要坚决破除传统的粗放式的人事管理思维方式,将注重于管人事向开发人力资源效能转变。严格树立分类管理思想,实行“老人老办法,新人新制度”的政策措施,在尽量规范军队院校现役军官人力资源管理制度的基础上,进一步完善文职人员管理制度,从而注重人力价值的创造与产出、保护与引导、配置与激励,制定人力资源规划、政策和人的潜能开发与培训。实施人力资源开发管理,将被动管控向主动实施人文关怀、激发各类人员的主人翁意识、实现自我价值转变。努力创建和谐的人力资源管理制度环境,把军队院校的发展目标与人才实现自身价值的目标有机地结合,充分调动各类人才立岗成才的积极性和创造性。
三是围绕人力资源社会化超前思维。随着军队体制编制调整的深化,文职人员人力资源管理制度的进一步深化,军队院校主要依靠现役军官制度的人力资源管理模式将会逐渐被取代,依托社会资源将成为军队院校发展建设的趋势。因此,人力资源制度必须树立社会化的理念,面向社会广揽人才。要主动与社会人才市场接轨,广泛及时地掌握社会人才动态信息,与重点院校联系开辟稳定的人才补充渠道,建立人才储备机制。
参考文献
[1]赵曼,陈全明主编.公共部门人力资源管理(第二版)[M].清华大学出版社,2010
[2国务院办公厅.中国人民解放军文职人员条例.2005年11月23日