java 集合什么情况需要用到迭代器

我看书学习java集合时经常看到 iterator迭代器,可以通过它来遍历集合,删除元素,如果是有序集合List还可以添加元素。

以前学集合的时候只是简单的学了几个方法add set remove get等等。在做项目的时候也完全够用。这几个方法和迭代器的方法是不是重复了

那么,问题来了,什么时候需要用到迭代器?这个迭代器需要熟练掌握吗?

2个回答

不知道楼主是否看到阿里 Java 开发规范,里面就定义了迭代器的一种典型场景:

就是需要对集合遍历且遍历过程中需要修改集合内容时,就必须使用迭代器,而不能直接操作集合,否则会导致 ConcurrentModifiedException 。
迭代器没有这种限制

楼主说的没错,掌握基本用法就够了,常规的集合基本方法就够用了,对于这种边遍历边删除的场景用迭代器。

sjddhs
日落冬至 这个异常,我在书上看过,就是使用for each遍历。 会转化成迭代器遍历集合 ,然后在for each括号内使用的代码修改集合元素时并没有使用该迭代器,而是相当于在该迭代器外部改变集合,然后就会抛出这个异常
3 个月之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 很有道理
3 个月之前 回复

集合必须是有限的,而迭代器则不必。
比如说,让你迭代所有的正整数,你可以1 2 3 4 5 ... 一直迭代下去。
但是你不能把所有的整数装入一个集合。

即便遍历的对象不是无限多的,比如说,我让你找出csdn问答中最新的n条提问来。
你如果用集合,那么首先要把csdn所有的问题都放入一个集合,虽然这是有限的,但是也是不经济的。
而用迭代器,我只要从最新的页面开始,一条一条给你,直到给你n条,就结束。

迭代器的作用在于,将遍历的逻辑(迭代器)和对每一个迭代对象(迭代器调用代码)分开,使得遍历可以被重用。如果没有迭代器,要么代码调用者必须自己一遍一遍写遍历的代码,有时候这个过程会很麻烦,比如遍历文件系统,或者取一个数列的前n项。要么让遍历的结果装入一个集合并返回,但是这么做的问题是,我们并不知道需要返回多少项,比如求比1000小的素数的和,你没法将需要返回多少项作为参数传进去,如果你把遍历后判断这个素数是不是小于1000的代码写在遍历中,又使得调用和被调用代码混合在一起了。

至于要不要熟练掌握,这个就不好说了。因为不是每个人都会成为专业的程序员,大多数人只是应付个考试,或者就算当程序员,也就是干个几天就转行了。或者说他的能力和智力根本不配当程序员,就算学会迭代器,还有别的他也学不会。你和他说要熟练掌握这个那个,不是扯么。

lqs365
棒棒不是糖_ 说的好...字字珠玑..
2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java 集合与迭代器间关系
HashSet<String> hs = new HashSet<String>(); hs.add("java"); hs.add("java"); hs.add("c"); hs.add("ios"); System.out.println(hs.size()); Iterator<String> it = hs.iterator(); while(it.hasNext()) { String s = (String) it.next(); if(s.equals("java")) { it.remove(); } System.out.println(s); } System.out.println(hs); System.out.println(hs.size()); 看上段代码:疑问: 疑问1:迭代器 与 集合 在**内存**中关系 疑问2:迭代过程删除某元素(it.remove())后,集合的大小 size() 改变了,为什么? 疑问3: 既然 size() 改变 it.remove(),为何还打印 被删除的元素,迭代结束重新打印集合反而 不打印?
Java中迭代器对象的一个疑问
最近学习了Java的迭代器对象(iterator),它有一个方法是.next(),返回下一个,或者说游标刚刚经过的那一个元素,很好理解,但是使用的时候却让我有些疑惑 完整代码如下 ``` public static void main(String[] args) { // TODO Auto-generated method stub //1)创建一个String集合,并添加元素 Collection collection01 = new LinkedList(); collection01.add("123"); collection01.add("456"); collection01.add("789"); //2)创建一个String的迭代器对象 Iterator<String> iterator01 = collection01.iterator(); //3)使用迭代器对象遍历集合 while(iterator01.hasNext()) { String thisString = iterator01.next();//指向下一个元素 System.out.println(thisString + '\t'); } } ``` 当while中的代码是先新建一个String对象,然后把.next()的值赋值给String对象时,得到的结果是正常的输出值,但是如果while循环的写法是下面这种 ``` while(iterator01.hasNext()) { iterator01.next(); System.out.println(iterator01.toString()); } ``` 得到的结果却是完整类名加哈希码,或者不用toString(),直接输出也是完整类名加哈希码,这是为什么呢,它在第一种写法里被强制类型转换了吗?
在CocoaTouch框架中选择迭代器模式,请问外部迭代器和内部迭代器有什么差别?
在CocoaTouch框架中选择迭代器模式,请问外部迭代器和内部迭代器有什么差别? 我想要访问组合对象的内容,有不暴露起内部的表示。我应该选择哪种迭代器模式会好一些呢?
迭代器模式和STL迭代器
请问STL迭代器和设计模式中的迭代器之间的异同点,stl迭代器是否使用了迭代器模式?
Java算法设计:迭代器实现排序(求各位大佬各抒己见)
老师预留的习题,说可能会考。希望能得到比较准备的回答用以备考。 假设你有M个迭代器(Java.util.Iterator),其中每一个迭代器定义为:由多个低成本基础迭代器组成,形成一个迭代器链(chain of Iterator),我们称之为resultant Iterator。每个resultant Iterator传递一个有序数据流。我们需要将这些数据流合并成一个最终有序数据流。 数据:每个数据由一串K个Key的序列组成 [k1,k2,k3,…,kK] 数据排序的规则为:最先排列k1,其次k2再次k3,……例如 [2,3,1,…] > [2,1,3,…] > [1,3,2,…]。每种key的排列在一个resultant Iterator中只会出现一次,但是多个resultant Iterator中可能出现相同的排列。 * 问题A:为了便于分析,我们假设每个resultant Iterator返回N个元素,设计一种算法,能得到最终有序数据流,同时效率高于 O(N.M.K.lg(M)). 并且计算所设计算法的复杂度。(可以设计你需要的变量和参数)。如果有多种算法,请简述各自的优劣。 * 问题B:简述如何重新设计迭代器,可以降低计算成本。为什么? * 问题C:若要在数据库中存储不可变的有序数据集(如本题中的数据),什么数据结构最为合适,为什么?若本题数据中所有的key都可以在byte的量级进行排序,例如有2个key,他们的排序根据他们第一个不同的byte进行排序。那对我们之前选择的数据结构有影响吗?若只有部分key可以又会怎么样? * 问题D:基于Java的思想,如何优化它在内存中的表示。为什么?
初学JAVA,集合迭代器问题
这两句输出有什么不一样呀!为什么一个可以输出,一个却输出不了?这是Account类的定义。![图片说明](https://img-ask.csdn.net/upload/201605/25/1464190399_133630.png)![图片说明](https://img-ask.csdn.net/upload/201605/25/1464190389_489740.png)
Java中迭代和循环有什么区别和联系
Java中迭代和循环有什么区别和联系 都是什么条件语句有循环和迭代啊
JAVA小白问题:测试Iterable接口的Iterator迭代器方法时遇到的疑问
![图片说明](https://img-ask.csdn.net/upload/201512/24/1450887396_135178.jpg) 创建个Arraylist集合,放几个数据,然后用迭代器循环遍历,同时想做个判断,如果等于指定的数值的数据出现了,就删除它,继续迭代别的元素,单独用remove删除方法没问题,但把它和next方法合起来用,就报错了,求解,谢谢!
link中定义一个Collectio是不是还需要实现迭代器呢?如何调用它?
link中定义一个Collectio是不是还需要实现迭代器呢?如何调用它?
JAVA 迭代器问题
已知迭代器索引,怎么得到指定索引位置的记录。
为什么这里vector的迭代器比较会触发断言?
![图片说明](https://img-ask.csdn.net/upload/201911/19/1574138959_226677.jpg) ```C++ #include<iostream> #include<initializer_list> #include<vector> using namespace std; void print(vector<string> v,vector<string>::iterator i) { //cout << typeid(i).name()<<endl; //cout << typeid(v.end()).name()<<endl; //调试后发现此处比较会触发断言 if (i == v.end()) { return; } else { cout << *i << endl; print(v, i +1); } } int main() { vector<string> v = { "hello","goo","test3","test" }; print(v, v.begin()); return 0; } ``` 在第一次比较的时候就触发断言,错误信息vector iterator incompatible 可我传入的不就是同类型的迭代器吗,为啥会不匹配?
什么时候会消耗迭代器?迭代器与迭代对象的区别
本人有python基础,请假下面两行代码不一致原因 实例一 i=[1,2,3,4,5,6,7,8,9] i=iter(i) for j in i: if j>=5: print("j={}".format(j)) break for k in i: print(k) 得到 j=5 6 7 8 9 实例二 i=[1,2,3,4,5,6,7,8,9] for j in i: if j>=5: print("j={}".format(j)) break for k in i: print(k) 输出 j=5 1 2 3 4 5 6 7 8 9
Java ListIterator关于逆向迭代器的问题?
``` List list=new ArrayList(); list.add(new Student("list1",16)); list.add(new Studetn("list2",17)); ListIterator it=list.ListIterator(); //hasNext()返回的值 System.out.println(it.hasNext()); //正向遍历列表 while(it.hasNext()){ Student stu=(Student)it.next(); if(stu.getName().equals("list1")) it.add(new Student("list2",17)); System.out.println(stu); } /* it.add(new Student("list4"),19); System.out.println(it.hasPrevious()); */ //逆向遍历列表 while(it.hasPrevious){ Student stu=(Student)it.previous(); System.out.println(stu); } ``` 这段代码,运行结果为: ``` true Student [name=list1,age=16] Student [name=list2,age=17] Student [name=list3,age=18] //如果保留那段注释,程序到这里就结束了 //如果去掉注释,那么 true Student [name=list4,age=19] ``` 所以为什么正向迭代返回true,逆向需要再用迭代器add一次后才可以返回 true
JAVA萌新求教,迭代器的使用问题
```public class MapDeemo { public static void main(String[] args) { String[] arr = "this is a cat and that is a mice".split(" "); Map<String,Integer> m = new HashMap<String,Integer>(); for(String key:arr){//遍历数组 //System.out.println(key); if(!m.containsKey(key)){ m.put(key, 1); } else{ m.put(key, m.get(key)+1); } } Set<String> keySet = m.keySet(); Iterator<String> iter = keySet.iterator(); while(iter.hasNext()){ /*Integer value = m.get(iter.next()); System.out.println(iter.next()+"-->"+value); */ String key = iter.next(); Integer value = m.get(key); System.out.println(key+"-->"+value); } } } ``` 在使用迭代器遍历的时候, /*Integer value = m.get(iter.next()); System.out.println(iter.next()+"-->"+value); */ String key = iter.next(); Integer value = m.get(key); System.out.println(key+"-->"+value); 这里被注释过的代码和下面的代码仿佛没什么区别啊,为什么我在第一次编写时,使用了注释了的代码,结果却是不正确的呢。。求大佬告知
java迭代问题,二次迭代问题i
import java.util.Iterator; import java.util.NoSuchElementException; public class MyArrrayList<AnyType> implements Iterable<AnyType> { private static final int DEFAULT_CAPACITY = 10; private int theSize; private AnyType[] theItems; public MyArrrayList() { clear(); } public void clear() { theSize = 0; ensureCapality(DEFAULT_CAPACITY); } public int size() { return theSize; } public boolean isEmpty() { return size() == 0; } public void trimSize() { ensureCapality(size()); } public AnyType get(int idx) { if (idx < 0 || idx >= size()) throw new ArrayIndexOutOfBoundsException(); return theItems[idx]; } public AnyType set(int idx, AnyType newVal) { if (idx < 0 || idx >= size()) throw new ArrayIndexOutOfBoundsException(); AnyType old = theItems[idx]; theItems[idx] = newVal; return old; } @SuppressWarnings("unchecked") public void ensureCapality(int newCapality) { if (newCapality < theSize) return; AnyType[] old = theItems; theItems = (AnyType[]) new Object[newCapality]; for (int i = 0; i < size(); i++) { theItems[i] = old[i]; } } public boolean add(AnyType x) { add(size(), x); return true; } public void add(int idx, AnyType x) { if (theItems.length == size()) ensureCapality(size() * 2 + 1); for (int i = theSize; i > idx; i--) theItems[i] = theItems[i - 1]; theItems[idx] = x; theSize++; } public AnyType remove(int idx) { if (idx < 0 || idx >= size()) throw new ArrayIndexOutOfBoundsException(); AnyType removeItem = theItems[idx]; for (int i = idx; i < theSize; i++) theItems[i] = theItems[i + 1]; theSize--; return removeItem; } @Override public Iterator<AnyType> iterator() { // TODO Auto-generated method stub return new ArrayListIterator(this); } private static class ArrayListIterator<AnyType> implements Iterator<AnyType> { private int current = 0; private MyArrrayList<AnyType> theList; public ArrayListIterator(MyArrrayList<AnyType> list){ theList=list; } public boolean hasNext() { return current < theList.size(); } public AnyType next() { return theList.theItems[current++]; } public void remove() { theList.remove(--current); } } public static void main(String[] args) { MyArrrayList<Integer> list=new MyArrrayList<Integer>(); for(int i=1;i<20;i++) list.add(i); Iterator<Integer> it=list.iterator(); while(it.hasNext()) { System.out.print(it.next()); System.out.print(" "); } Iterator<Integer> its=list.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } } 请问我的输出为:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 明明写了两个输出语句,为什么只有一个输出呢?
C++中迭代器移动和运算符比较的问题
C++中,迭代器iter+1,表示的是向begin方向移动一个位置还是end方向移动? 何为向前移动?向后移动? C++Primer第五版中,迭代器的关系运算符中,如果某迭代器指向的容器位置在另一个迭代器所指位置之前,则说明前者小于后者。 请问怎么理解?
有关迭代器iterator的java实现的问题
public Iterator<Item> iterator(){ return new ArrayIterator(); } private class ArrayIterator implements Iterator<Item>{ private int[] random; private int current = 0; //line: 47 random = new int[N]; for(int i = 0; i < N; i++) random[i] = head + i; StdRandom.shuffle(random); public boolean hasNext(){ //line:52 return current != (N - 1); } public void remove(){ } public Item next(){ return RQ[random[current++]]; } } 错误报告 File: C:\Users\CHN\algs4\RandomizedQueue.java [line: 47] Error: Syntax error on token ";", { expected after this token File: C:\Users\CHN\algs4\RandomizedQueue.java [line: 52] Error: Syntax error, insert "VariableDeclarators" to complete LocalVariableDeclaration File: C:\Users\CHN\algs4\RandomizedQueue.java [line: 52] Error: Syntax error, insert ";" to complete LocalVariableDeclarationStatement File: C:\Users\CHN\algs4\RandomizedQueue.java [line: 52] Error: Syntax error on token "{", ; expected 总报告缺分号、花括号之类的 但像这样的又可以( 不是同一个类里的): public Iterator<Item> iterator(){ return new ListIterator(); } private class ListIterator implements Iterator<Item>{ private Node current = first; public boolean hasNext(){ return current != null; } public void remove(){ } public Item next(){ Item item = current.item; current = current.next; return item; } } 对java一知半解,求解答,谢谢。
返回指向vector某一元素的迭代器?
有什么方法可以返回指向vector某一元素的迭代器? (除了begin和end函数)
c++stl中list的end到底是什么,尾后迭代器到底是如何实现的?
c++stl中list的end到底是什么,尾后迭代器到底是如何实现的?如果end是空,那么哪来的--end?
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
YouTube排名第一的励志英文演讲《Dream(梦想)》
Idon’t know what that dream is that you have, I don't care how disappointing it might have been as you've been working toward that dream,but that dream that you’re holding in your mind, that it’s po...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
相关热词 c# 输入ip c# 乱码 报表 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件
立即提问